查找无环单链表的相交节点

查找两个无环单链表的相交节点

题目描述:如果两个无环单链表相交,怎么求出他们相交的第一个节点呢?

分析:采用对齐的思想。计算两个链表的长度 L1,L2;分别用
两个指针 p1 , p2指向两个链表的头节点,然后从较长链表的头结点 p1(假设为 p1)开始向前移动L1-L2个节点,然后再同时向前移动p1 , p2,直到 p1 = p2。相遇的点就是相交的第一个节点。

单链表-链表有环如何判断相交

单链表-链表有环如何判断相交

题目描述:上面的问题都是针对链表无环的,那么如果现在,链表是有环的呢?上面的方法还同样有效么?

分析:如果有环且两个链表相交,则两个链表都有共同一个环,即环上的任意一个节点都存在于两个链表上。因此,就可以判断一链表上俩指针相遇的那个节点,在不在另一条链表上。

找出单链表有环的入口节点

找出单链表有环的入口节点

题目描述:输入一个单向链表,判断链表是否有环。如果链表存在环,如何找到环的入口点?

解题思路: 由上题可知,按照p2每次两步,p1每次一步的方式走,发现 p2 和 p1重合,确定了单向链表有环路了。接下来,让p2回到链表的头部,重新走,每次步长不是走2了,而是走1,那么当 p1 和 p2 再次相遇的时候,就是环路的入口了。

判断单链表是否有环

判断单链表是否有环

题目描述:输入一个单向链表,判断链表是否有环?

分析:通过两个指针,分别从链表的头节点出发,一个每次向后移动一步,另一个移动两步,两个指针移动速度不一样,如果存在环,那么两个指针一定会在环里相遇。这其实就是追赶游戏,跑的快的肯定能追的上慢的。

找出单链表的中间节点

找出单链表的中间节点

题目描述:求链表的中间节点,如果链表的长度为偶数,返回中间两个节点的任意一个,若为奇数,则返回中间节点。

分析:此题的解决思路和「求链表的倒数第 k 个节点」很相似。可以先求链表的长度,然后计算出中间节点所在链表顺序的位置。但是如果要求只能扫描一遍链表,如何解决呢?通过两个指针来完成。用两个指针从链表头节点开始,一个指针每次向后移动两步,一个每次移动一步,直到快指针移到到尾节点,那么慢指针即是所求。

找出单链表倒数第K个节点

找出单链表倒数第K个节点

题目描述:输入一个单向链表,输出该链表中倒数第k个节点,链表的倒数第0个节点为链表的尾指针。
分析:设置两个指针 p1、p2,首先 p1 和 p2 都指向 head,然后 p2 向前走 k 步,这样 p1 和 p2 之间就间隔 k 个节点,最后 p1 和 p2 同时向前移动,直至 p2 走到链表末尾。

单链表逆转

单链表逆转

题目描述:输入一个单向链表,输出逆序反转后的链表

分析:单向链表的转置是一个很常见、很基础的数据结构题。但就是在面试中没有做出了,后悔在学校没有加强数据结构的学习和编程。

|