给定一个链表,从链表尾部算起,删除第n个节点,并返回链表头节点。
例如:
> 给定列表:1->2->3->4->5,和 n = 2。
> 从尾部算起,删除第2个节点后,链表变为:1->2->3->5。
说明:
1. 给出的 n 总是有效的,比如不会出现负数。
2. 尽可能使用 O(n) 算法实现。
Go 示例定义:
```go
/**
* 定义一个单链表:
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func removeNthFromEnd(head *ListNode, n int) *ListNode {
}
```
更多评论
```go
type ListNode struct {
Val int
Next *ListNode
}
func removeNthFromEnd(head *ListNode, n int) *ListNode {
if head != nil {
// 获取长度
var hLen int
for l := head; l != nil; l = l.Next {
hLen++
}
// 计算删除位置
n = hLen - n + 1
front := head
now := head.Next
for i := 2; i < n && now.Next != nil; i++ {
front = now
now = front.Next
}
front.Next = now.Next
now = nil
return head
}
return nil
}
```
#1
单链表
```go
func removeNthFromEnd(head *NodeList, n int) *NodeList {
if head == nil{
return nil
}
if n < 0 {
return head
}
i, j := head, head
z := 0
for ; i.Next != nil; i=i.Next{
if z < n+ 1 {
z++
continue
}
j = j.Next
}
if(z > n){
j.Next = j.Next.Next
}
return head;
}
```
#3