Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
合并两个已经排序的链表,并将其作为一个新链表返回。新的链表应该通过拼接前两个链表的节点来完成。
解题思路:本题比较两个链表中节点的大小,如果当前链表中节点的值小于另外一链表中节点的值,将节点值小的插入到新的链表中。最后需要判断,剩下的链表不为空,需要将其中剩下的节点一个个插入到新的链表中。
代码如下:
public class MergeTwoSortedLists {
public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1 == null) {
return l2;
}
if(l2 == null) {
return l1;
}
ListNode result = new ListNode(0);
ListNode pre = l1,rear = l2;
ListNode currentNode = result;
ListNode temp = null;
while(pre != null && rear != null) {
if(pre.val < rear.val) {
temp = pre;
currentNode.next = temp;
pre = pre.next;
}else {
temp = rear;
currentNode.next = temp;
rear = rear.next;
}
currentNode = currentNode.next;
}
while(pre != null) {
currentNode.next = pre;
pre=pre.next;
currentNode = currentNode.next;
}
while(rear != null) {
currentNode.next = rear;
rear=rear.next;
currentNode =currentNode.next;
}
return result.next;
}
public static void main(String[] args) {
ListNode l10 = new ListNode(1);
ListNode l11 = new ListNode(3);
ListNode l12 = new ListNode(5);
l10.next = l11;
l11.next = l12;
l12.next = null;
ListNode l20 = new ListNode(2);
ListNode l21 = new ListNode(4);
ListNode l22 = new ListNode(6);
l20.next = l21;
l21.next = l22;
l22.next = null;
ListNode node = mergeTwoLists(l10, l20);
while(node != null) {
if(node.next == null) {
System.out.println(node.val);
}else{
System.out.print(node.val +"->");
}
node = node.next;
}
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
