的链表,重温一下过去才知道,新的链表是由一个个对象作为节点组成的。每个节点都有一个指向下一个节点的指针,最后一个节点的指针域指向null。每个节点都可以存储任何数据类型。按类型可分为单链表、双链表、循环链表、复杂链表等结构,这些结构又可以相互组合。对这部分基础内容不熟悉的同学可以看看我之前写的PHP数据结构实战基础单链表和PHP数据结构实战基础双链表。《剑指offer》链表相关话题俗话说,光说不练假动作。既然学习了链表的基本概念和基本操作,就要找一些题目来巩固一下。让我们看看《剑指offer》中的相关主题。输入一个链表,从头到尾打印链表每个节点的值题目分析:这道题比较简单,调查的基础知识,难度系数一星。检查测试点:链表。解决方案示例:functionprintListFromTailToHead($head){//在这里写代码$list=[];$currentNode=$head;while($currentNode){$list[]=$currentNode->val;$currentNode=$currentNode->next;}returnarray_reverse($list);}输入一个链表,输出链表的最后第k个节点。题目分析:基础知识还是考察一下,难度系数一星。检查测试点:链表。示例解决方案:functionFindKthToTail($head,$k){$currentNode=$head;$数据=[];如果($currentNode){while($currentNode){$data[]=$currentNode;$currentNode=$currentNode->下一个;}返回$data[count($data)-$k];}returnnull;}输入两个单调递增的链表,将两个链表合并后输出链表。当然,我们需要组合链表满足单调不减规则。题目分析:合并两个已排序的链表,需要分别比较两个链表的每一个值,然后改变next指针。检查测试点:链表。解决方案示例:/*递归解决方案*//*classListNode{var$val;var$next=NULL;函数__construct($x){$this->val=$x;}}*/functionMerge($pHead1,$pHead2){if(is_null($pHead1)){返回$pHead2;}elseif(is_null($pHead2)){返回$pHead1;}$merged=newListNode(null);如果($pHead1->val<$pHead2->val){$merged->val=$pHead1->val;$merged->next=Merge($pHead1->next,$pHead2);}else{$merged->val=$pHead2->val;$merged->next=Merge($pHead1,$pHead2->next);}return$merged;}在一个排序链表中,存在重复节点,请删除链表中的重复节点,重复节点不保留,返回链表头指针。比如链表1->2->3->3->4->4->5处理为1->2->5题目分析:保存相同的值,然后判断相同的结点到更改前一个节点的下一个只是一个指针。检查测试点:链表。解决方案示例:/*classListNode{var$val;var$next=NULL;函数__construct($x){$this->val=$x;}}*/functiondeleteDuplication($pHead){$currentNode=$pHead;$prev=空;如果($currentNode){而($currentNode){如果($currentNode->val==$currentNode->next->val){$sameVal=$currentNode->val;while($currentNode->val==$sameVal){$currentNode=$currentNode->next;}//头节点if(empty($prev)){$pHead=$currentNode;$currentNode=$pHead;}else{//普通节点$prev->next=$currentNode;}}else{$prev=$currentNode;$currentNode=$currentNode->下一个;}}}return$pHead;}??两个链表的第一个公共节点解决方案示例:/*classListNode{var$v铝;var$next=NULL;函数__construct($x){$this->val=$x;}}*/functionFindFirstCommonNode($pHead1,$pHead2){$currentNode1=$pHead1;$currentNode2=$pHead2;如果($currentNode1===$currentNode2){return$pHead1;}while($currentNode1!==$currentNode2){$currentNode1=($currentNode1==null?$pHead2:$currentNode1->next);$currentNode2=($currentNode2==null?$pHead1:$currentNode2->next);}return$currentNode1;}更多问答PHP基础数据结构专题系列目录地址:https://github.com/...主要使用PHP语法总结基本数据结构和算法,我们日常容易忽略的基础知识PHP开发,以及现代PHP开发规范、部署、优化的一些实用建议,以及对Javascript语言特性的深入研究。
