[Go] LeetCode 24.两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题02.07.链表相交 142.环形链表 II
以下是针对LeetCode上第24题和第19题的Go语言解法:
第24题:两两交换链表中的节点
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func swapPairs(head *ListNode) *ListNode {
dummy := &ListNode{0, head}
p := dummy
for p.Next != nil && p.Next.Next != nil {
a, b := p.Next, p.Next.Next
p.Next = b
a.Next = b.Next
b.Next = a
p = a
}
return dummy.Next
}
第19题:删除链表的倒数第N个节点
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func removeNthFromEnd(head *ListNode, n int) *ListNode {
dummy := &ListNode{0, head}
p, q := dummy, dummy
for i := 0; i < n+1; i++ {
q = q.Next
}
for q != nil {
p = p.Next
q = q.Next
}
p.Next = p.Next.Next
return dummy.Next
}
这两个解法都使用了快慢指针或者使用计数来找到要删除的节点的前一个节点,然后通过简单的操作删除目标节点。
评论已关闭