lhl
首页
python
leetcode
产品思想
软件测试
博客 (opens new window)
github (opens new window)
首页
python
leetcode
产品思想
软件测试
博客 (opens new window)
github (opens new window)
  • python

  • leetcode

    • 数组

    • 位运算

    • 动态规划

    • 链表

      • 21. 合并两个有序链表
      • 141. 环形链表
      • 142. 环形链表 II
      • 160. 相交链表
      • 203. 移除链表元素
      • 206. 反转链表
      • 234.回文链表
    • 栈

    • 树

  • 软件测试

  • Git

  • linux

  • 产品

  • MySql

  • docker

  • leetcode
  • list
2023-04-29

合并两个有序链表

https://leetcode.cn/problems/merge-two-sorted-lists/ (opens new window) 需要注意的点

  1. 需要返回虚拟头节点.next
  2. 进行迭代的是另一个指针, 需要进行不断后移
  3. 判断的重要性
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def mergeTwoLists(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        # 虚拟头节点,返回该节点.next
        prehead = ListNode(-1)
        # 进行迭代的真实指针
        prev = prehead
        p1 = l1
        p2 = l2
        while p1 and p2:
            if p1.val >= p2.val:
                prev.next = p2
                p2 = p2.next
            else:
                prev.next = p1
                p1 = p1.next
            
            # 此时的prev 的指针并不是更新后的位置,需要往后移
            # prev = prev.next
            # 可以简单理解成1. prev = prehead, 2. prev.next = p1 or p2 3.prev = prev.next
            prev = prev.next
        
        # 这个判断很重要
        # 如果p1 or p2 为空,返回p1 or p2
        # 如果进行过循环后,p1 or p2 为空, prev.next = p1 or p2
        prev.next = p1 if p1 is not None  else p2

        # 返回prehead.next
        return prehead.next
338. 比特位计数
141. 环形链表

← 338. 比特位计数 141. 环形链表→

最近更新
01
lhl learn notes
02
filter
06-09
03
decorator
06-09
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式