删除链表的倒数第 n 个节点
删除链表的倒数第n个节点
http://www.nowcoder.com/questionTerminal/f95dcdafbde44b22a6d741baf71653f6
由于题中已经表示 n 一定有效,因此不考虑 n 无效的情况。
限定时间复杂度为 O(n), 说明需要在一个循环内完成,因此我们使用前后指针的形式。
使用 pre 表示当前节点 cur 的前一个结点,next 结点表示距离当前结点 cur 为 n 的结点,因此,当 cur 移动到最后一个结点时,此时删除 cur 就完成了题目中的要求。
package main
import . "nc_tools"
/*
* type ListNode struct{
* Val int
* Next *ListNode
* }
*/
/**
*
* @param head ListNode类
* @param n int整型
* @return ListNode类
*/
func removeNthFromEnd( head *ListNode , n int ) *ListNode {
// write code here\
var root *ListNode
root = &ListNode{Val: 0,Next: nil}
root.Next = head
var pre *ListNode
var cur *ListNode
var next *ListNode
pre = root
cur = head
next = head
for i:=1;i<n;i++{
next = next.Next
}
for next!=nil&&next.Next!=nil{
pre = pre.Next
cur = cur.Next
next = next.Next
}
pre.Next = cur.Next
return root.Next
}
查看4道真题和解析