来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
方法1-一趟扫描,两个快慢节点来实现。
func removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? {
let node = ListNode(0)
var slow: ListNode? = node
var fast: ListNode? = node //快的节点,先走n个,走完之后,慢节点再走
slow?.next = head
//快节点,走完n个,还有总长度-n。
for _ in 1...n {
fast = fast?.next
}
//去完n个,剩下的继续
while fast?.next != nil {
//慢指针开始动
slow = slow?.next
fast = fast?.next
}
//跳过倒数第n个。
slow?.next = slow?.next?.next
return node.next
}
网友评论