剑指Offer_编程题_合并两个排序的链表
2020-04-24 16:02:23来源:博客园 阅读 ()
剑指Offer_编程题_合并两个排序的链表
剑指Offer_编程题_合并两个排序的链表剑指Offer_编程题_合并两个排序的链表
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。题目答案,思路
https://www.nowcoder.com/questionTerminal/d8b6b4358f774294a89de2a6ac4d9337?f=discussion
递归版本
链接:https://www.nowcoder.com/questionTerminal/d8b6b4358f774294a89de2a6ac4d9337?f=discussion 来源:牛客网 public ListNode Merge(ListNode list1,ListNode list2) { if(list1 == null){ return list2; } if(list2 == null){ return list1; } if(list1.val <= list2.val){ list1.next = Merge(list1.next, list2); return list1; }else{ list2.next = Merge(list1, list2.next); return list2; } }
非递归版本
public class Solution { public ListNode Merge(ListNode list1,ListNode list2) { ListNode root = new ListNode(-1); //临时指向的节点,可以理解为临时的 root 尾节点 ListNode last = root; while (list1 != null && list2 != null) { if (list1.val <= list2.val) { //重新 last.next=list1; last = list1; list1 = list1.next; } else { last.next = list2; last = list2; list2 = list2.next; } } //把未结束的链表连接到合并后的链表尾部 if (list1 != null) { last.next = list1; } if (list2 != null) { last.next = list2; } return root.next; } }
测试代码
public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public class TestListNode { // 链接:https://www.nowcoder.com/questionTerminal/d8b6b4358f774294a89de2a6ac4d9337?f=discussion // 来源:牛客网 //尾插法创建单链表 队列形式先进先出 public void back(ListNode node, int data) { if (data < 10) { ListNode next = new ListNode(data); next.val = data; next.next = null; node.next = next; back(next,data+3); } } public void back2(ListNode node, int data) { if (data < 10) { ListNode next = new ListNode(data); next.next = null; node.next = next; back2(next, data=data+2); } } public static void main(String[] args) { ListNode headNode; ListNode headNode2; TestListNode list1 = new TestListNode(); headNode = new ListNode(3);//头指针 list1.back(headNode, 4);//后插法 System.out.println("创建后的链表是:"); // while (headNode.next != null) { // headNode = headNode.next; // System.out.print(headNode.val + " "); // } System.out.println("-----------------------------"); TestListNode list2 = new TestListNode(); headNode2 = new ListNode(4);//头指针 list2.back2(headNode2, 5);//后插法 System.out.println("创建后的链表是:"); // while (headNode2.next != null) { // headNode2 = headNode2.next; // System.out.print(headNode2.val + " "); // } ListNode merged= new Solution().Merge(headNode,headNode2); System.out.println("merge :"); while (merged.next != null) { merged = merged.next; System.out.print(merged.val + " "); } } }
原文链接:https://www.cnblogs.com/liran123/p/12767907.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 因为命名被diss无数次。简单聊聊编程最头疼的事情之一:命名 2020-06-10
- Java3个编程题整理 2020-06-09
- (易忘篇)java基础编程难点4 2020-06-08
- 终于拿到了美团offer了,没有辜负了这三个月的努力啊 2020-06-06
- (易忘篇)java基础编程难点3 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash