代码随想录算法训练营第四天|24.两两交换链表中的节点、19.删除链表的倒数第N个节点、160.链表相交、142、环形链表

【24.两两交换链表中的节点】

今天学习的的文章链接:https://programmercarl.com/0024.两两交换链表中的节点.html

看到题目的第一想法:操作链表节点的时候,最基本的是要知道需要操作的节点的前一个节点。注意使用dummyHead。

看完代码随想录的想法:

1.遍历结束的条件需要注意:cur->next != NULL && cur->next->next != NULL。而且这两个条件不能调换位置,不然会出现空指针异常

2.需要使用temp、temp1来缓存节点的指针

【19.删除链表的第N个节点】

今天学习的文章链接:https://programmercarl.com/0019.删除链表的倒数第N个节点.html#_19-删除链表的倒数第n个节点

看到题目的第一想法:先求出链表的长度,再计算倒数第N个节点是正数第几个节点。(这样需要遍历两次)

看完代码随想录的想法:

1.使用双指针「快慢指针」的方式就可以只需要遍历一次。

2.先让快指针fast向前走n步,再让快慢指针同时向前走,直到fast到最后。这样慢指针slow所指向的节点就是需要删除的节点。

【160.链表相交】

今天学习的文章链接:https://programmercarl.com/面试题02.07.链表相交.html#思路

看到题目的第一想法:需要将两个链表尾部对齐之后,使用「双指针」。让长链表的指针走到和短链表指针相同的位置之后,开始判断指针是否相同。

看完代码随想录的想法:

1.并不是判断数值相等,而是指针相等

2.需要注意A链表长度比B链表长度短的情况,如果B链表长度更长,则需要将curA和curB交换。(始终保持curA指向的是更长的链表)

【142.环形链表】

今天学习的文章链接:https://programmercarl.com/0142.环形链表II.html#_142-环形链表ii

看完题目的第一想法:这题需要用到双指针中的「快慢指针」,还需要一定的数学计算。

看完代码随想录的想法:

1.快指针一次走两个节点、慢指针一次走一个节点

2.快慢指针肯定会在环内相交,若没有香蕉则不存在环

3.快慢指针相交的节点到环入口的距离等于链表头到环入口的距离

今天的学习心得:

今天的四题有三题都是用到双指针,但是每题里面双指针的使用方式都不相同。需要根据具体的要求来确定双指针的具体算法。

 

你可能感兴趣的:(算法,leetcode,链表,数据结构)