合并两个顺序的链表

链接:剑指 Offer 25. 合并两个排序的链表 - 力扣(LeetCode) (leetcode-cn.com)

本题中要注意解决两个问题:

1.要合并的两个链表l1,l2可能为空,所以要对这两个链表为空的情况进行三种类型讨论:(1).都为空 (2).1空,2不空 (3).1不空,2空

2.一开始的头节点设置要先处理,找两链表的头节点值中小的那一个

 

前置条件:

1 public class ListNode {
2          int val;
3          ListNode next;
4          ListNode(int x) { val = x; }
5     }

 

代码:

 1 public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
 2         if (l1 == null && l2 == null) {
 3             return null;
 4         }
 5         int min;
 6         if (l1 == null) {
 7             min = l2.val;
 8         }
 9         else if (l2 == null) {
10             min = l1.val;
11         }
12         else {
13             min = Math.min(l1.val, l2.val);
14         }
15         ListNode p = l1,q = l2;
16         ListNode head = new ListNode(min);
17         if (l1 != null && head.val == l1.val) {
18             p = p.next;
19         }
20         else {
21             q = q.next;
22         }
23         ListNode r = head;
24         while (p != null && q != null) {
25             if (p.val < q.val) {
26                 r.next = p;
27                 p = p.next;
28                 r = r.next;
29             }
30             else {
31                 r.next = q;
32                 q = q.next;
33                 r = r.next;
34             }
35         }
36         while (p != null) {
37             r.next = p;
38             p = p.next;
39             r = r.next;
40         }
41         while (q != null) {
42             r.next = q;
43             q = q.next;
44             r = r.next;
45         }
46         r = null;
47         return head;
48     }

 

可以将以上条件进行归纳化,得到简易代码:

 

 1 public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
 2            ListNode newHead = new ListNode(0);
 3            ListNode cur = newHead;
 4            while (l1 != null && l2 != null) {
 5                if (l1.val < l2.val) {
 6                    cur.next = l1;
 7                    l1 = l1.next;
 8                }
 9                else {
10                    cur.next = l2;
11                    l2 = l2.next;
12                }
13                cur = cur.next;
14            }
15            cur.next = l1 != null ? l1 : l2;
16            return newHead.next;
17      }

 

posted @ 2022-04-08 11:50  jue1e0  阅读(35)  评论(0)    收藏  举报