Delete List Node(删除链表中的第倒数第k个节点)
题目描述:
给定一个链表的第头节点,要求删除链表中的倒数第k个节点。
例子:
1->2->3->4->5->NULL.比如删除倒数第二个节点4,要求返回链表头节点包含1->2->3->5->NULL.
解题思路:
因为单项链表无法向前遍历的特点,所以我们可以用一个指示节点来帮助我们找到链表中的倒数第k个节点。做法是:先定义一个指向指针,从链表头结点开始遍历先走k步;而后再定义个遍历指针从链表头部开始遍历,当指示节点遍历到链表尾部的时候,这个时候后遍历的指针刚好达到链表中的第k个节点。需要注意的是,我们删除第k个节点,需要知道第k-1个节点的指针,所以要定义一个pre指针用来保存待删除节点的前一个节点。
代码如下:
|
|
延伸题目1:
链表中的中间节点。与上面的思路一样,利用快慢指针的方法就可以找到链表的中间节点。首先定义快指针fast和慢指针slow,快指针每次走两步,慢指针一次走一步。这样当快指针到达链表末尾的时候,慢指针刚好到达链表的中间节点部分。同样记得记录待删除节点的前一个节点。
代码如下:
|
|
延伸题目2:
给定一个链表的头节点和整数a和整数b。要求删除链表中a/b地方的节点。这一题的主要麻烦之处是找到要删除的节点在链表中的位置,所以a/b在链表中的位置该怎么找事关键。这边主要用到的是(a*n)/b公式,得到的数值即为要删除节点在链表中的位置。
代码如下:
|
|