数据结构与算法-链表(五):剑指offer-合并两个排序链表

合并两个排序链表

一、题目

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

二、解析

首先有两个链表,合并成新的链表;你要知道一条链表只要知道他的一个头就等于获得了整条链表,因此本题输入输出都是头,输入的是两条旧链的header,输出是新的链的header
设置三个指针(如果把新链表的header也当成指针就是四个),这三个指针分别是两条旧链的当前位置,一条新链的当前位置

步骤:

  • 边界条件
    – 1 判断边界条件,如果某一条旧链为空,那么直接返回另外一条链即可

  • 最开始的工作
    – 1 因为输出的是新链表的头,设置newHead,等于两条旧链的头部最小值
    – 2 引入三个指针,分别是两条旧链当前的位置,也是之后用来进行比较谁大,以及新链表的当前位置
    – 3 既然新链表的表头newHead已经确定,那么将它指向下一个节点吧

  • 开始进入循环,只要两个旧链表的当前位置不为空,就一直循环下去,循环就是更新当前新链表取值以及指向下一个位置
    – 比较两条旧链表当前位置谁小,新链表指针指向小的,并且更新
    – 注意更新的有两个东西,一个是新链表更新为旧链表小的那一个,另一个更新原本小的旧链表header

  • 出去循环证明有一个链表的当前位置到最后啦,那么当前的新链表直接连在另一条旧链表上即可。

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    # 返回合并后列表
    def Merge(self, pHead1, pHead2):
        # write code here
        if pHead1 == None:
            return pHead2
        if pHead2 == None:
            return pHead1
        
        
        newHead = pHead1 if pHead1.val<pHead2.val else pHead2
        
        # 引入两个指针,记录链条链表到达了哪里
        pTmp1 = pHead1
        pTmp2 = pHead2
        
        # 指针开始移动
        if newHead == pTmp1:
            pTmp1 = pTmp1.next
        else:
            pTmp2 = pTmp2.next
            
        # 再引入一个指针,指得是新的一条链的当前的位置,用于记录当前的位置
        previousPointer = newHead
        
        # 开始循环,他们有一个为空就不循环
        while pTmp1 and pTmp2:
            if pTmp1.val < pTmp2.val:
                previousPointer.next = pTmp1  # 当前的节点指向一个小的节点
                previousPointer = pTmp1
                pTmp1 = pTmp1.next  # 跳指针
            else:
                previousPointer.next = pTmp2
                previousPointer = pTmp2
                pTmp2 = pTmp2.next
                
            # 循环出来是pTmp1或者pTmp2有一个值为空,判断是哪一个值为空
        if pTmp1 == None:  # pTmp1已经到头了,所以新链表接到另外一条的前面就好
            previousPointer.next = pTmp2
        else:
            previousPointer.next = pTmp1
            
        return newHead  # 因为是链表,所以输出一个头,其他的都会知道了

发布了49 篇原创文章 · 获赞 2 · 访问量 1821

猜你喜欢

转载自blog.csdn.net/liuluTL/article/details/104975096
今日推荐