<?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));
网友评论