输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
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 13 if (null == list1 && null == list2) { 14 return null; 15 } 16 17 if (null == list1 && null != list2) { 18 return list2; 19 } 20 21 if (null == list2 && null != list1) { 22 return list1; 23 } 24 25 ListNode head = null; // 合并后的头节点 26 27 ListNode p1 = null; // 遍历list1的指针 28 ListNode p2 = null; // 遍历list2的指针 29 ListNode p = null; // 指向当前合并后的链表的尾节点 30 31 // 确定头节点 32 if (list1.val < list2.val) { 33 head = list1; 34 p1 = list1.next; 35 p2 = list2; 36 } else { 37 head = list2; 38 p1 = list1; 39 p2 = list2.next; 40 } 41 42 p = head; 43 44 // 遍历和比较list1和list2,将较小值加入新的链表 45 while (null != p1 && null != p2) { 46 if (p1.val > p2.val) { 47 p.next = p2; 48 p2 = p2.next; 49 } else { 50 p.next = p1; 51 p1 = p1.next; 52 } 53 p = p.next; 54 } 55 56 // 其中一个链表遍历完毕,直接将另一个链表添加到新链表尾 57 if (null == p1) { 58 p.next = p2; 59 } 60 61 if (null == p2) { 62 p.next = p1; 63 } 64 65 return head; 66 67 } 68 }