- 题目
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
- 思路:双指针 + 前哨节点
- 双指针找到倒数第 n 个节点的前节点。
- 删除倒数第 n 个节点。
- 代码
class Solution {
func removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? {
var steps = n
let dummy = ListNode(0)
dummy.next = head
var slow: ListNode? = dummy, fast = head
while steps > 0 {
fast = fast?.next
steps -= 1
}
while fast != nil {
slow = slow?.next
fast = fast?.next
}
slow?.next = slow?.next?.next
return dummy.next
}
}