NOTE
删除链表的倒数第n个节点
删除链表的倒数第n个节点的 LeetCode 解题笔记。
这是历史学习笔记,可能存在过时或不完整的理解。
1. 题目描述
给定一个链表,删除链表的倒数第n个节点并返回链表的头指针 例如, 给出的链表为:1->2->3->4->5, n= 2. 删除了链表的倒数第n个节点之后,链表变为1->2->3->5.
2. 思路
- 思路一
- 遍历一遍计数,第二遍走到 count-n 节点
- 思路二
- 双指针
- 一个指针先走n步
- 两个指针一起走直到快指针走到末尾
3. 实现
3.1. 两次遍历
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func removeNthFromEnd(head *ListNode, n int) *ListNode {
h := head
count := 0
for h != nil {
count++
h = h.Next
}
dummyHead := &ListNode{
Next:head,
}
h = dummyHead
for i := 0; i < count-n; i++{
h = h.Next
}
delNode := h.Next
h.Next = delNode.Next
delNode.Next = nil
return dummyHead.Next
}
3.2. 双指针
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func removeNthFromEnd(head *ListNode, n int) *ListNode {
dummyHead := &ListNode{Next:head}
fast := dummyHead
for i:= 0; i < n; i++ {
fast = fast.Next
}
slow := dummyHead
for fast != nil && fast.Next != nil {
fast = fast.Next
slow = slow.Next
}
slow.Next = slow.Next.Next
return dummyHead.Next
}
讨论
使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看