博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

。。。剑指Offer之——合并两个排序的链表。。。

 1 public ListNode Merge(ListNode list1, ListNode list2) {
 2 //        list1,list2中,只要有一个是空的,则返回另外一个链表
 3         if (list1 == null) {
 4             return list2;
 5         }
 6         if (list2 == null) {
 7             return list1;
 8         }
 9 //        新建一个链表
10         ListNode k = new ListNode(Integer.MIN_VALUE);
11 //        新建一个头指针,指向新建的链表
12         ListNode head = k;//k其实是用来迭代合并之后的链表
13 //        p指针用来迭代list1,q指针用来迭代list2
14         ListNode p = list1, q = list2;
15         while (p != null && q != null) {
16 //            哪一个值小,k就指向谁
17             if (p.val > q.val) {
18                 k.next = q;
19                 k = q;
20                 q = q.next;//往后移动
21             } else {
22                 k.next = p;
23                 k = p;
24                 p = p.next;//往后移动
25             }
26         }
27 //        最终如果q提前结束(q==null),p不为空,则直接把p挂到k的后面
28         if (p != null) {
29             k.next = p;
30         }
31 //        最终如果q提前结束(p==null),q不为空,则直接把q挂到k的后面
32         if (q != null) {
33             k.next = q;
34         }
35 //        真正的头节点是原来新建k节点的下一个节点,因为k是新建的节点,
36 //        合并之后,k节点其实不属于最终合并之后的链表
37         return head.next;
38     }

 

posted @ 2019-04-27 10:48  影梦  阅读(127)  评论(0编辑  收藏  举报