36. 合并两个排序的链表
题目:
输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。
思考题:
请同时实现迭代版本和递归版本。
样例
输入:1->3->5 , 2->4->5
输出:1->2->3->4->5->5
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode merge(ListNode l1, ListNode l2) {
if(l1 == null && l2 == null)
return null;
else if(l1 == null)
return l2;
else if(l2 == null)
return l1;
ListNode node1 = l1;
ListNode node2 = l2;
ListNode node = null;
if(node1.val < node2.val){
node = node1;
node1 = node1.next;
}else{
node = node2;
node2 = node2.next;
}
ListNode nodePre = node; //保存node的头节点,确保node不为空
while(node1 != null && node2 !=null){
if(node1.val > node2.val){
node.next = node2;
node2 = node2.next;
node = node.next;
}
else{
node.next = node1;
node1 = node1.next;
node = node.next;
}
}
//将两个链表中有的数值补充到node后面
if(node1 == null)
node.next = node2;
if(node2 == null)
node.next = node1;
return nodePre;
}
}