合并两个有序链表,并返回一个新的有序链表。
这道题很简单。可以用递归求解,也可以用非递归求解;注意:如果用非递归求解,发现新链表的头结点不确定,所以引入dummy节点。不多说之间上代码。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//递归
/*ListNode ret = null;
if(l1 == null)
return l2;
if(l2 == null)
return l1;
if(l1.val > l2.val){
ret = l2;
ret.next = mergeTwoLists(l2.next,l1);
} else {
ret = l1;
ret.next = mergeTwoLists(l1.next,l2);
}
return ret;*/
/* 除了dummy节点外还引入一个lastNode节点充当下一次合并时的头节点。在l1或者l2的某一个节点为空指针NULL时,退出while循环,并将非空链表的头部链接到lastNode->next中。*/
ListNode dummy = new ListNode(0);
ListNode lastNode = dummy;
while((l1!=null) && (l2!=null)){
if(l2.val > l1.val){
lastNode.next = l1;
l1 = l1.next;
} else {
lastNode.next = l2;
l2 = l2.next;
}
lastNode = lastNode.next;
}
lastNode.next = (l1!=null)?l1:l2;
return dummy.next;
}
}
希望大家多多指正交流!
版权声明:本文为博主原创文章,未经博主允许不得转载。
LeetCode_Linked List_Merge Two Sorted Lists
原文地址:http://blog.csdn.net/gldemo/article/details/46686731