链表面试题总结

链表面试题总结

1.删除所有val值:遍历一遍,每个结点的值和val进行比较。

2.反转(逆置)链表:方法1:三个指针逆置

​ 方法2:尾删,头插

3.求链表的中间结点: 设置快慢指针,快的每次走俩步,慢的每次走一步。

4.输出倒数第k个结点:设置俩个指针,第一个先走K步,然后俩个指针同时走,第一个指针走到空,第

​ 二个指针的位置就是倒数第K个结点。 ​

5.合并俩个有序链表:拿几个指针一直比较,小的进行尾插,指针同时一直移动。

​ cur1 cur2 pTail Newhead

6.依据x,分割链表:5个指针,lt lt_tail ge ge_tail cur,小于x的lt链表,大于等于ge链表,lt_tail,ge_tail

​ 负责移动,插入cur遍历

7.删除重复结点:利用prev保存相同结点之前的最后一个结点(用于删除),p1 p2在相同结点移动

​ result保存头结点。先删除,再重新拼接链表。

8.链表是否回文:利用快慢指针找到中间结点K,再从中间结点k的下一个结点开始逆置链表。然后设置

​ 双指针开始遍历俩个链表,进行比较。​

9.输入俩个链表,找出它们第一个公共结点:分别求出链表的长度,求出长度差n,再定义俩个指针,让

​ 长的链表先走n步,然后俩个链表同时走,结点相同时返回结点。

10.给定一个链表,判断链表中是否有环:设置快慢指针,快的走俩步,慢的走一步,相交就有环。

11.给定一个链表,返回链表开始入环的第一个结点,如果没有环就返回空

​ 设置快慢指针,若有环,必相遇。在相遇点处,慢指针单步走,设置新的指针在头

​ 结点处,同时单步走,俩指针必在入环出相遇。

发布了19 篇原创文章 · 获赞 18 · 访问量 3646

猜你喜欢

转载自blog.csdn.net/haote216/article/details/88243883