给定一个链表,删除链表的倒数第 n 个节点并返回链表的头指针
例如,
给出的链表为:1->2->3->4->5 , .
删除了链表的倒数第 个节点之后,链表变为
.
备注:
题目保证 一定是有效的
请给出时间复杂度为 的算法
思路:
遍历获取链表长度,找到要删除的节点,然后删掉,记得把链表连接起来
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
node := head
length := 0
for node != nil {
node = node.Next
length++
}
if length == 1 && n == 1 {
return nil
}
resPre := new(ListNode)
resPre.Next = head
pre := resPre
node = head
for i := 0; i < length-n; i++ {
pre = node
node = node.Next
}
pre.Next = node.Next
return resPre.Next
}