LeetCode-golang删除链表的倒数第N个节点(题19)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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)

复杂度

  • 时间复杂度: O ( n ) O(n)
  • 空间复杂度: O ( 1 ) O(1)

猜你喜欢

转载自blog.csdn.net/glw0223/article/details/88544670
今日推荐