《剑指offer》(面试题17):合并两个排序的链表
2018-02-01 22:20
363 查看
在面试过程中,最容易犯两种错误:一是在写代码之前没有对合并的过程想清楚,最终合并出来的链表要么中间断开了要么并没有做到递增排序;二是代码在鲁棒性方面存在问题,程序一旦有特殊的输入(如空链表)就会崩溃。
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
新创建一个指针就可以,比较两个链表的值,然后做相应递归更新。
循环:
需要创建两个指针,一个指向合并链表的表头,另一个用于更新,不断指向合并链表的表尾。最后返回指向表头的指针即可。
需要注意的是,我为了简化代码,新建的是指向带有头结点的链表(链表有带头结点和不带头结点点两种)。如果全部初始化为NULL(python是None),那么我在循环之前,就得加个判断来给合并链表的第一个结点赋值。
递归
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解题思路
递归:新创建一个指针就可以,比较两个链表的值,然后做相应递归更新。
循环:
需要创建两个指针,一个指向合并链表的表头,另一个用于更新,不断指向合并链表的表尾。最后返回指向表头的指针即可。
需要注意的是,我为了简化代码,新建的是指向带有头结点的链表(链表有带头结点和不带头结点点两种)。如果全部初始化为NULL(python是None),那么我在循环之前,就得加个判断来给合并链表的第一个结点赋值。
Python 代码实现
递归# -*- 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 is None: return pHead2 elif pHead2 is None: return pHead1 pMergeHead = ListNode(0) if pHead1.val < pHead2.val: pMergeHead = pHead1 pMergeHead.next = self.Merge(pHead1.next, pHead2) else: pMergeHead = pHead2 pMergeHead.next = self.Merge(pHead1, pHead2.next) return pMergeHead
循环
# -*- 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 is None: return pHead2 elif pHead2 is None: return pHead1 pMergeTail = pMergeHead = ListNode(0) while pHead1 and pHead2: if pHead1.val < pHead2.val: pMergeTail.next = pHead1 pHead1 = pHead1.next else: pMergeTail.next = pHead2 pHead2 = pHead2.next pMergeTail = pMergeTail.next pMergeTail.next = pHead1 or pHead2 return pMergeHead.next
相关文章推荐
- 《剑指Offer》面试题17:合并两个排序的链表
- 《剑指offer》面试题17—合并两个排序链表
- 《剑指offer》面试题17:合并两个排序的链表
- 剑指offer-chapter3-面试题17-合并两个排序的链表(java)
- 剑指offer——面试题17:合并两个排序的链表(非递归方法和递归方法)
- (剑指Offer)面试题17:合并两个排序的链表
- 剑指Offer之面试题17:合并两个排序的链表
- 剑指offer(面试题17):合并两个已排序的链表
- 剑指offer:面试题 17:合并两个排序的链表
- 剑指offer——面试题17:合并两个排序的链表
- 剑指offer之面试题17:合并两个排序的链表
- 剑指offer-面试题17:合并两个排序的链表
- 剑指Offer面试题16反转链表(递归和非递归),面试题17合并两个排序的链表(递归)
- 剑指Offer系列-面试题17:合并两个排序的链表
- 《剑指Offer》学习笔记--面试题17:合并两个排序的链表
- 剑指offer--面试题17:合并两个排序的链表
- 合并两个排序的链表(面试题17)
- 剑指offer:(17)代码的鲁棒性:合并两个排序的链表
- 面试题17:合并两个排序的链表
- 面试题17—合并两个排序的链表