【发布时间】:2021-12-06 02:13:14
【问题描述】:
我正在尝试从 Leetcode here 编写一个方法,该方法允许合并两个排序的链表(请忽略我需要添加 l2 的值更大的情况这一事实)。到目前为止,我的策略是创建一个名为 mergedList 的新链表,并使用 while 循环迭代地添加新值:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode temp1 = l1;
ListNode temp2 = l2;
ListNode curr = null;
ListNode mergedList = null;
ListNode testpoint = null;
if(l1 == null && l2 == null) {
return null;
}
else if(l1 == null && l2 != null) {
return l2;
}
else if(l1 != null && l2 == null) {
return l1;
}
else if(l1.next == null && l2.next == null) {
if(l1.val <= l2.val) {
l1.next = new ListNode(l2.val);
return l1;
}
else {
l2.next = new ListNode(l1.val);
return l2;
}
}
if(temp1.val <= temp2.val) {
while(temp1 != null) {
mergedList = new ListNode(temp1.val);
testpoint = mergedList;
while(temp2 != null) {
if(temp1.next != null) {
if(temp1.val <= temp2.val && temp2.val <= temp1.next.val) {
curr = temp2;
mergedList.next = new ListNode(temp2.val);
}
}
temp2 = temp2.next;
}
temp2 = curr;
temp1 = temp1.next;
}
}
System.out.println("");
System.out.println("");
while(testPoint != null) {
System.out.println(testPoint.val);
testPoint = testPoint.next;
}
return mergedList;
}
}
但是,当我尝试使用 testpoint 作为指向它的指针打印出合并列表时,打印的唯一值是最后一个值 - 为什么?我错过了什么会阻止正确创建新的链表?
【问题讨论】:
-
看看how to debug small programs。这绝对是调试将帮助您发现方法中的缺陷的情况之一。单步执行您的代码,观察变量并查看代码是否真的按照您的意愿执行。这是早期学习的宝贵技能。
标签: java linked-list singly-linked-list