<?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));
两种方式翻转链表
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 描述 给你一个链表以及一个k,将这个链表从头指针开始每k个翻转一下。链表元素个数不是k的倍数,最后剩余的不用翻转。...