目录
一、反转链表
🌻迭代
📝其实要反转链表不需要再定义一个新的链表来实现反转,只需要改变原链表next的指向就可以了。从头结点开始,顺次让每个链表结点都指向它的前一个结点就好,头结点的前一个就是空结点,原来最后一个结点不再指向空结点,而改为指向倒数第二个结点。
🔔但要注意的是:改变指向必须从链表的头结点开始,原链表的每一个结点的指向都要改变(要不然会形成死循环的)
🌻递归
二、删除链表的倒数第N个结点
🌻小白做法:
注意考虑特殊情况(当要删除的结点是头结点)
🌻设置虚拟头结点的做法
思路和小白做法一样,但因为设置了虚拟头结点,所以不用考虑删除头结点这种特殊情况
🌻快慢指针法
刚才我们看到了,因为题目要求删除的是倒数第n个结点,所以上面的方法都是先要求出链表的长度,再通过长度求出要删除结点的下标,那我们能不能再不求出链表长度的情况下成功删除该结点呢?
💖我们其实想象一下我们的链表其实是分为两个部分的:倒数第n个结点前面是一部分,倒数第n个结点后面又是一部分。而双指针法正是利用了这个特性来做的。
🔔 但要注意的是我们删除结点一般都是要找到该结点的前一个结点,所以我们的fast先要移动n+1步,以便之后让我们的slow指向要删除结点的前一个结点。
小伙伴们,都看到这里了,是不是已经迫不及待的想刷题了,一起冲呀!!!