<?php
class LinkList
{
public $val;
public $nextLink;//下一个节点
public function __construct($val){
$this->val=$val;
}
function appendToTail($i){
$newLink=new LinkList($i);
$current=$this;
while($current->nextLink != null){
$current=$current->nextLink;
}
$current->nextLink=$newLink;
}
}
class LinkListTest
{
/**
*翻转链表
**/
function reverseLink($link){
//需要3个指针
//$l1,$l2,$l3;
if($link == null || $link->nextLink == null){
return $link;
}
$l1=null;
$l2=$link;
while($l2 != null){
$l3=$l2->nextLink;//先把p2的下一个节点保存起来
$l2->nextLink=$l1;//翻转p1、p2,p2的下一个节点指向p1
//向后移动p1,p2,p3节点
$l1=$l2;//p1向后移动到p2
$l2=$l3;//p2向后移动到原来的p2->nextLink
}
return $l1;//返回原来的表尾,现在是表头
}
/**
*递归实现
*翻转链表
*/
function reverseLink1($link)
{
if($link == null || $link->nextLink == null){
return $link;
}
$l1=$link->nextLink;
$link->nextLink=null;
$revLink=$this->reverseLink1($l1);
$l1->nextLink=$link;
return $revLink;
}
//打印链表
function printLink($link){
while($link != null){
echo $link->val."->";
$link=$link->nextLink;
}
}
}
$list3=new LinkList(1);
$list3->appendToTail(2);
$list3->appendToTail(3);
$list3->appendToTail(2);
$list3->appendToTail(5);
$ll= new LinkListTest;
$ll->printLink($ll->reverseLink($list3));
$ll->printLink($ll->reverseLink1($list3));
两种方式翻转链表
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...