直观的三个指针,两个在比较list
public class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if ( l1 == null || l2 == null){
if ( l1 != null)
return l1;
else
return l2;
}
ListNode res = new ListNode(0);
ListNode p1 = l1;
ListNode p2 = l2;
ListNode resp = res;
while ( p1 != null && p2 != null){ <span style="color:#ff0000;">//这里一开始判断写错了,写成了p1.next != null...这样的话就忽略了最后一个</span>
if ( p1.val > p2.val){
resp.next = p2;
p2 = p2.next;
}
else{
resp.next = p1;
p1 = p1.next;
}
resp = resp.next;
}
if ( p1 != null )
resp.next = p1;
if ( p2 != null )
resp.next = p2;
return res.next;
}
}recursive:
class Solution {
public:
ListNode *mergeTwoLists(ListNode *l1, ListNode *l2) {
if(l1 == NULL) return l2;
if(l2 == NULL) return l1;
if(l1->val < l2->val) {
l1->next = mergeTwoLists(l1->next, l2);
return l1;
} else {
l2->next = mergeTwoLists(l2->next, l1);
return l2;
}
}
};

本文介绍了一种使用迭代和递归方法合并两个有序链表的算法。通过设置虚拟头节点简化边界条件处理,并展示了如何比较两个链表节点的值来决定合并顺序。
1480

被折叠的 条评论
为什么被折叠?



