剑指offer-----合并两个排序的链表
Posted pythonbigdata
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer-----合并两个排序的链表相关的知识,希望对你有一定的参考价值。
题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
参考博客:https://blog.csdn.net/qq_18254385/article/details/94558439
原博客有些错误!!!
解法1:
(容器法)首先将两个链表保存到容器内,然后使用排序算法进行排序,之后重新整理每个节点的next指向。
class ListNode: def __init__(self,x): self.val=x self.next=None def Merge(pHead1,pHead2): if pHead1==None and pHead2==None: return None elif pHead1==None and pHead2!=None: return pHead2 elif pHead1!=None and pHead2==None: return pHead1 stack=[] while pHead1: stack.append(pHead1) pHead1=pHead1.next while pHead2: stack.append(pHead2) pHead2=pHead2.next for i in range(len(stack)): for j in range(len(stack)-1-i): if stack[j].val > stack[j+1].val: stack[j],stack[j+1]=stack[j+1],stack[j] stack[-1].next=None for i in range(len(stack)-1): stack[i].next=stack[i+1] return stack[0] a=ListNode(1) b=ListNode(2) c=ListNode(3) d=ListNode(4) e=ListNode(5) f=ListNode(6) a.next=c c.next=e b.next=d d.next=f node=Merge(a,b) while node: print(node.val) node=node.next
解法2:
(指针法)
1、使用两个指针同时指向两个不同的头结点,另外创建一个新链表用于连接输出的节点;
2、比较两个指针所指向节点的值得大小,将小的节点输出连接到新链表后面,同时该节点的指针指向下一个节点;
3、不断指向上一步,直到其中一个链表被输出完毕,那么另一个链表直接连接在新链表后面
4、返回新链表的第二个节点
class ListNode: def __init__(self,x): self.val=x self.next=None def Merge(pHead1, pHead2): # write code here mergeHead = ListNode(90) p = mergeHead while pHead1 and pHead2: if pHead1.val >= pHead2.val: mergeHead.next = pHead2 pHead2 = pHead2.next else: mergeHead.next = pHead1 pHead1 = pHead1.next mergeHead = mergeHead.next if pHead1: mergeHead.next = pHead1 elif pHead2: mergeHead.next = pHead2 return p.next a=ListNode(1) b=ListNode(2) c=ListNode(3) d=ListNode(4) e=ListNode(5) f=ListNode(6) a.next=c c.next=e b.next=d d.next=f node=Merge(a,b) while node: print(node.val) node=node.next
以上是关于剑指offer-----合并两个排序的链表的主要内容,如果未能解决你的问题,请参考以下文章