// 主函数 funcremoveNthFromEnd(head *ListNode, n int) *ListNode { // 虚拟头结点 dummy := &ListNode{-1, head} // 删除倒数第 n 个,要先找倒数第 n + 1 个节点 x := findFromEnd(dummy, n + 1) // 删掉倒数第 n 个节点 x.Next = x.Next.Next return dummy.Next }
// 返回链表的倒数第 k 个节点 funcfindFromEnd(head *ListNode, k int) *ListNode { p1 := head // p1 先走 k 步 for i := 0; i < k; i++ { p1 = p1.Next } p2 := head // p1 和 p2 同时走 n - k 步 for p1 != nil { p1 = p1.Next p2 = p2.Next } // p2 现在指向第 n - k + 1 个节点,即倒数第 k 个节点 return p2 }
倒数K链表移除
复用上边的代码,找到倒数x=k+1, 然后赋值x.next = x.next.next 即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14
// 主函数 funcremoveNthFromEnd(head *ListNode, n int) *ListNode { // 虚拟头结点 dummy := &ListNode{-1, head} // 删除倒数第 n 个,要先找倒数第 n + 1 个节点 x := findFromEnd(dummy, n + 1) // 删掉倒数第 n 个节点 x.next = x.next.next return dummy.next }
funcfindFromEnd(head *ListNode, k int) *ListNode { // 代码见上文 }