剑指Offer 16. 合并两个排序的链表 (链表)
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
题目地址
思路
思路1:循环:如果两个链表不为空,进行比较,将小的赋给合并的指针头,小的链表走一步,合并链表走一步,如果有一个为空,跳出循环,并将另一不为空的链表后续部分赋给合并链表
思路2:递归:如果第一个链表为空,则返回第二个链表,如果第二个链表为空,则返回第一个链表,如果两个链表都为空,结果为空
两个链表都是排序好的,我们只需要从头遍历链表,判断当前指针,哪个链表的值小,即赋给合并链表指针。
Python
# -*- coding:utf-8 -*-
class ListNode:
def __init__(self, x):
self.val = x
self.next = None node1 = ListNode(1)
node2 = ListNode(3)
node3 = ListNode(5)
node1.next = node2
node2.next = node3
node4 = ListNode(2)
node5 = ListNode(4)
node6 = ListNode(6)
node4.next = node5
node5.next = node6 class Solution:
# 返回合并后列表
def Merge(self, pHead1, pHead2):
# 循环
# newHead = ListNode(-1)
# pre = newHead
# while pHead1 and pHead2:
# if pHead1.val < pHead2.val:
# pre.next = pHead1
# pHead1 = pHead1.next
# else:
# pre.next = pHead2
# pHead2 = pHead2.next
# pre = pre.next
# pre.next = pHead1 if pHead1 else pHead2
# return newHead.next # 递归
if not pHead1:
return pHead2
if not pHead2:
return pHead1
newHead = None
if pHead1.val < pHead2.val:
newHead = pHead1
newHead.next = self.Merge(pHead1.next, pHead2)
else:
newHead = pHead2
newHead.next = self.Merge(pHead1, pHead2.next)
return newHead if __name__ == '__main__':
result = Solution().Merge(node1,node4)
print('合并链表:',end = ' ')
while result:
print(result.val,end = ' ')
result = result.next
剑指Offer 16. 合并两个排序的链表 (链表)的更多相关文章
- [剑指Offer] 16.合并两个排序链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. [思路1]递归 /* struct ListNode { int val; struct Lis ...
- [剑指offer] 16. 合并两个排序的链表
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 解法一: 非递归解 class Solution { public: ListNode *Mer ...
- 《剑指offer》 合并两个排序的链表
本题来自<剑指offer> 合并两个排序的链表 题目: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路: A:采用递归的方式(C++ C ...
- 剑指Offer:合并两个排序的链表【25】
剑指Offer:合并两个排序的链表[25] 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题目分析 每次都是比较箭头节点,把小节点连接到已经合 ...
- 剑指 Offer 25. 合并两个排序的链表
剑指 Offer 25. 合并两个排序的链表 Offer 25 该问题的原型就是多项式的合并. 实现较简单,没有特殊需要注意的问题. package com.walegarrett.offer; /* ...
- 【剑指Offer】合并两个排序的链表 解题报告(Python)
[剑指Offer]合并两个排序的链表 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interview ...
- 【Java】 剑指offer(25) 合并两个排序的链表
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照 ...
- Go语言实现:【剑指offer】合并两个排序的链表
该题目来源于牛客网<剑指offer>专题. 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. Go语言实现: //递归 func merge(l ...
- [剑指offer]25.合并两个排序的链表(迭代+递归)
25.合并两个排序的链表 题目 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: 输入:1->2->4, 1->3->4 输出:1-> ...
随机推荐
- js 取消事件冒泡
html部分 <input type="button" id="btn1" value="按钮" /> <div id=& ...
- Gym - 100989H
After the data structures exam, students lined up in the cafeteria to have a drink and chat about ho ...
- Docker Compose 一键部署多节点爬虫程序
Docker Compose 一键部署多节点爬虫程序 目录结构 [root@localhost ~]# tree compose_crawler/ compose_crawler/ ├── cento ...
- Link-Cut-Tree详解
图片参考YangZhe的论文,FlashHu大佬的博客 Link-Cut-Tree实际靠的是实链剖分,重链剖分和长链剖分珂以参考树链剖分详解 Link-Cut-Tree将某一个儿子的连边划分为实边,而 ...
- opencv学习之路(23)、轮廓查找与绘制(二)——访问轮廓每个点
一.简介 二.画出每个轮廓的每个点 #include "opencv2/opencv.hpp" using namespace cv; void main() { Mat src= ...
- ArchLinux 无密码Samba 配置
安装上迅雷后就必须把硬盘挂上去开个Samba,然后边下电影边看,这就是一个Nas了. 开搞! pacman -S samba 安装samba,然后进入/etc/samba/目录 vim smb.con ...
- 浅谈HTTP中GET、POST用法以及它们的区别
浅谈HTTP中GET.POST用法以及它们的区别 HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符.我们可以这样认为: 一 ...
- react中使用antd遇到的问题
1.less使用报错 less配置修改一般都是1个修改1个增加 test: /\.(css|less)$/, // 修改 // 增加 { loader: require.resolve('less-l ...
- 点击倒计时60S获取验证码
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...
- 『Python CoolBook:Collections』数据结构和算法_collections.deque队列&yield应用
一.collections.deque队列 deque(maxlen=N)构造函数会新建一个固定大小的队列.当新的元素加入并且这个队列已满的时候,最老的元素会自动被移除掉. 如果你不设置最大队列大小, ...