版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/glw0223/article/details/88544670
题面
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
源码
type ListNode struct {
Val int
Next *ListNode
}
func A19_removeNthFromEnd(head *ListNode, n int) *ListNode {
dummy := ListNode{0,head}
first := &dummy
second := &dummy
// 两个指针之间的间隔是n
for i := 1; i <= n + 1; i++ {
first = first.Next
}
for first != nil {
first = first.Next
second = second.Next
}
second.Next = second.Next.Next
return dummy.Next
}
测试代码及结果
func TestA19_removeNthFromEnd(t *testing.T) {
head:=question11_20.ListNode{1,nil}
temp1:=&head
for i:=2;i<6;i++ {
temp:=question11_20.ListNode{i,nil}
temp1.Next = &temp
temp1 = temp1.Next
}
result:=question11_20.A19_removeNthFromEnd(&head,2)
var str string
for result != nil{
str+=fmt.Sprintf("%d->",result.Val)
result = result.Next
}
str=strings.TrimRight(str,"->")
fmt.Println(str)
}
=== RUN TestA19_removeNthFromEnd
1->2->3->5
--- PASS: TestA19_removeNthFromEnd (0.00s)
复杂度
- 时间复杂度:
- 空间复杂度: