剑指offer——合并两个排序的链表

题目描述

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

代码实现(Java)

方案一:递归方法

 1 /*
 2 public class ListNode {
 3     int val;
 4     ListNode next = null;
 5
 6     ListNode(int val) {
 7         this.val = val;
 8     }
 9 }*/
10 public class Solution {
11     public ListNode Merge(ListNode list1,ListNode list2) {
12         if(list1==null){
13             return list2;
14         }else if(list2==null){
15             return list1;
16         }
17         ListNode mergeListNode=null;
18         if(list1.val<list2.val){
19             mergeListNode=list1;
20             mergeListNode.next=Merge(list1.next,list2);
21         }else{
22             mergeListNode=list2;
23             mergeListNode.next=Merge(list1,list2.next);
24         }
25         return mergeListNode;
26     }
27 }

方案二:非递归方法

 1 public static ListNode merge(ListNode head1, ListNode head2) {
 2         if (head1 == null) {
 3             return head2;
 4         }
 5
 6         if (head2 == null) {
 7             return head1;
 8         }
 9
10         ListNode root = new ListNode();
11         // 用于指向合并后的新链的尾结点
12         ListNode pointer = root;
13
14         // 当两个链表都不为空就进行合并操作
15         while (head1 != null && head2 != null) {
16             if (head1.value < head2.value) {
17                 pointer.next = head1;
18                 head1 = head1.next;
19             } else {
20                 pointer.next = head2;
21                 head2 = head2.next;
22             }
23             pointer = pointer.next;
24         }
25
26         // 如果第一个链表的元素未处理完将其,接到合并链表的最后一个结点之后
27         if (head1 != null) {
28             pointer.next = head1;
29         }
30
31         // 如果第二个链表的元素未处理完将其,接到合并链表的最后一个结点之后
32         if (head2 != null) {
33             pointer.next = head2;
34         }
35         return root.next;
36     }

原文地址:https://www.cnblogs.com/wangqiong/p/11761947.html

时间: 2024-11-10 14:29:24

剑指offer——合并两个排序的链表的相关文章

python剑指offer 合并两个排序的链表

题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. # -*- 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: re

[剑指offer] 合并两个排序链表

题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 输入描述 两个单调递增的链表 输出描述 一个单调不减的链表 题目分析 节点申明: public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } 解法一 (递归) 运行时间:31ms 占用内存:629k public class Solution { public Li

剑指OFFER——合并两个有序的链表

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 再做这道题就是想不起来书上怎么做的了,但是最近看STL里面全是这种基础的合并啊,比较啊.就算不会也看会了. 循环我用了4个指针.p和q分别指向两个链表当前需要比较的元素,l和k分别代表“新”的链表的旧节点和新节点,防止断了. 每次新比较的结果给k,l代表之前的节点. 循环: /* struct ListNode { int val; struct ListNode *next; ListNode(int

剑指Offer-16.合并两个排序的链表(C++/Java)

题目: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 分析: 可以用一个新的节点,来去比较两个单调递增的链表当前节点的值,如果p1当前的值小于p2,则新的节点的next=p1,p1移到下一个节点,新的节点p也要移动到下一个节点. 当然也可以用递归来做.C++常规做法,Java递归实现. 程序: C++ class Solution { public: ListNode* Merge(ListNode* pHead1, ListNode* pHead

剑指offer17合并两个排序的链表

Tv运远厦7V籽4姓62http://shequ.docin.com/vkih86746 201m蚜疽6qg壤笛http://tushu.docin.com/fhqrw5685 8lUo孜拇迸si瓮怀2u4http://tushu.docin.com/sina_6367438287 N6DXQ7烟肝牧币5http://www.docin.com/app/user/userinfo?userid=179007252 4o料75HXN市范1Zhttp://weibo.com/p/1005056373

剑指offer-合并两个排序的链表

题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. public class Test { class ListNode { int value; ListNode next; public ListNode(int value) { this.value = value; } } /** * node1: 1->3->5->7; * node2: 2->4->6->8->9->10->11; * @

【剑指offer】Q17:合并两个排序的链表

def Merge(head1, head2): if head1 == None: return head2 if head2 == None: return head1 psuhead = ListNode(-1) tail = psuhead while head1 and head2: if head1.val < head2.val: cur = head1 head1 = head1.next else: cur = head2 head2 = head2.next cur.next

剑指Offer:合并两个排序的链表【25】

剑指Offer:合并两个排序的链表[25] 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题目分析 每次都是比较箭头节点,把小节点连接到已经合并的链表之后,重复的执行此过程,最后如果那个链表已经走完,那就将另一个链表直接连接到合并的链表之后. Java题解 public static ListNode Merge(ListNode list1,ListNode list2) { if(list1==null) return list2;

剑指offer(十六) 合并两个排序的链表

合并两个排序的链表 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 用JavaScript非递归和递归方式都AC了. 非递归: function ListNode(x){ this.val = x; this.next = null; } function Merge(pHead1, pHead2) { if(!pHead1) { return !pHead2 ? null:pHead2; }else if(!pHead2) { retur