labuladong打卡之单链表的六大解题技巧Golang版
一、解决题目(LeetCode)
21. 合并两个有序链表(简单)
23. 合并K个升序链表(困难)
141. 环形链表(简单)
142. 环形链表 II(中等)
876. 链表的中间结点(简单)
160. 相交链表(简单)
19. 删除链表的倒数第 N 个结点(中等)
二、相关题目
双指针技巧
21.合并两个有序链表
原题链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/submissions/
也使用了常见的「虚拟头节点」技巧,也就是head
节点。如果不使用head
虚拟节点,代码会复杂很多,而有了head
节点这个占位符,可以避免处理空指针的情况,降低代码的复杂性。
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func mergeTwoLists(list1 *ListNode, list2 *ListNode) *ListNode {
head := &ListNode{
Val: 0,
Next: nil,
}
p := head
p1, p2 := list1, list2
for p1 != nil && p2 != nil {
if p1.Val <= p2.Val {
p.Next = p1
p1 = p1.Next
} else {
p.Next = p2
p2 = p2.Next
}
p = p.Next
}
if p1 != nil {
p.Next = p1
}
if p2 != nil {
p.Next = p2
}
return head.Next
}
23. 合并 k 个有序链表
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 赛 の 任意门!
评论
ValineGitalk