当前位置: 首页 > 后端技术 > PHP

翻转链表&判断链表是否有环

时间:2023-03-30 00:30:39 PHP

通过学习翻转链表和判断链表是否有环这两个简单的例子来加深对链表数据结构的理解。1.链表翻转1.1链表翻转原理图1.2链表翻转代码addFirst($i);}echo$linkedList->toString();/***20->19->18->17->16->15->14->13->12->11->10->9->8->7->6->5->4->3->2->1->null*/echo"n";functionreverse($head){$pre=$头;$cur=$head->下一个;while($cur){$next=$cur->next;$cur->next=$pre;$pre=$cur;$cur=$next;}$head->next=null;返回$pre;}$linkedList->setHead(reverse($linkedList->getHead()));echo$linkedList->toString();/***1->2->3->4->5->6->7->8->9->10->11->12->13->14->15->16->17->18->19->20->null*/echo"n";演示输出如下:2.判断链表是否有环Insert置1,遍历到环时,由于两个指针保持1的速度差,肯定会在环上相遇结尾。有会,即有环。如果快速指针最终指向空意味着没有戒指2.3示意图2.4示例代码e=$e;$this->next=$next;}}functionisLoop($head){$fast=$head;$slow=$head;$i=1;while($fast!==null&&$slow!==null){if($fast===$slow){返回真;$fast=$fast->next->next??无效的;//每次跳两步$slow=$slow->next??无效的;//每次跳一步if($i)$i++;}returnfalse;}$node1=newNode(1);$node2=newNode(2);$node3=newNode(3);$node4=newNode(4);$node5=newNode(5);$node6=新节点(6);$node7=新节点(7);$node8=新节点(8);$node9=新节点(9);$node1->next=$node2;$node2->next=$node3;$node3->next=$node4;$node4->next=$node5;$node5->next=$node6;$node6->next=$node7;$node7->next=$node8;$node8->next=$node9;$node9->next=$node5;var_dump(isLoop($node1));Demo输出如下:代码仓库:https://gitee.com/love-for-po...扫描二维码关注爱因世贤