4 java algorithm linked-list data-structures
我正在尝试使用Java实现LinkedList,只是为了测试我的技能.我遇到了一个问题,我必须附加两个我创建的链表.我在这里进入一个无限循环.有什么办法可以改进代码并实现所需的输出吗?
I/P:
列表A:4-> 3-> 2-> 1-> 0
列表B:4-> 3-> 2-> 1-> 0
O/P应为:4-> 3-> 2-> 1-> 0-> 4-> 3-> 2-> 1-> 0
class List {
int val;
List next;
public List(int val) {
this.val = val;
}
public String toString() {
String output = "";
List current = this;
while (current != null) {
output += current.val + "->";
current = current.next;
}
return output + "NULL";
}
}
class AppendLinkedLists {
static List push(List list, int num) {
List newList = new List(num);
newList.next = list;
return newList;
}
static List appendLists(List listA, List listB) {
if (listA == null)
return listB;
else {
List tempList = listA;
while (tempList.next.next != null) {
tempList = tempList.next;
}
tempList.next.next = listB;
return listA;
}
}
public static void main(String[] args) {
List listA = new List(0);
listA = push(listA, 1);
listA = push(listA, 2);
listA = push(listA, 3);
listA = push(listA, 4);
List listB = listA;
System.out.println("Input List A : " + listA.toString());
System.out.println("Input List B : " + listB.toString());
listA = appendLists(listA, listB);
System.out.println("Combined Input Lists A and B : " + listA.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
您没有2个列表.你只有一个.
List listB = listA;
Run Code Online (Sandbox Code Playgroud)
指定listB指向的引用listA.所以你要追求listA自我.
无论你有什么其他问题,我都会纠正这个问题(最简单的方法就是以listB与你创建方式类似的方式创建listA).
我的另一个评论(希望你不介意)是你已经创建了一个List对象,但它有很少/没有自己的行为.AppendLinkedLists我不会创建你的类,而是将功能放入List对象中,而不是:
listA = push(listA, 1);
Run Code Online (Sandbox Code Playgroud)
写:
listA.push(1);
Run Code Online (Sandbox Code Playgroud)
因此,行为被封装在 List 对象中.同样,你可以写:
listA.push(listB);
Run Code Online (Sandbox Code Playgroud)
通过使用重载.
| 归档时间: |
|
| 查看次数: |
1651 次 |
| 最近记录: |