我是数据结构的新手,我正在尝试为链表编写一些问题。问题是合并 2 个排序的链表。我已经为它编写了以下代码,但是当我返回时。接下来从我的方法中,我只是获取合并链表的最后一个值,这是代码片段。我不知道我哪里出错了。
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode head = new ListNode();
ListNode curr = head;
while(l1 != null && l2 != null) {
if(l1.val <= l2.val) {
curr.next = l1;
l1 = l1.next;
}else {
curr.next = l2;
l2 = l2.next;
}
}
if(l1 != null){
curr.next = l1;}
else if(l2 != null){
curr.next = l2;}
return head.next;
}
curr
在向当前节点的下一个节点添加值后,您不会增加,所以真正发生的是您继续向当前节点的下一个节点添加值。
展示
1->5->6 列表 1
2->3 列表 2
head = new ListNode(); // dummyNode;
current = head; // i.e dummyNode
第一次迭代
虚拟节点 -> 1
(请注意您如何不将 dummyNode 增加到 1,因此在每次迭代中,下一个 dummyNodes 将被替换)
第二次迭代
虚拟节点 -> 2
第三次迭代
虚拟节点 -> 3
(等等 .....)
在所有迭代之后,你会留下
虚拟节点 -> 6
所以当你回来的时候你head.next
会得到 6
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode head = new ListNode();
ListNode curr = head;
while(l1 != null && l2 != null) {
if(l1.val <= l2.val) {
curr.next = l1;
l1 = l1.next;
}else {
curr.next = l2;
l2 = l2.next;
}
curr = curr.next;
}
if(l1 != null){
curr.next = l1;
curr = curr.next;
}
else if(l2 != null){
curr.next = l2;
curr = curr.next;
}
return head.next;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句