如何将现有节点添加到我的链表的开头?
How to add an existing node to the start of my linked list?
这是一项学校作业,谁能指出我正确的方向。我正在尝试使用递归在奇数和偶数之间拆分链表,但 .add(IntNode) 似乎有问题,它在前 2 个节点之间交替,就像它正在覆盖它一样。我已经解决了所有我能想到的问题,看来我使用 add 不正确。我必须编辑赔率和偶数方法并将原始链表留空。
这是我的代码,如有任何帮助,我们将不胜感激。
测试代码:
public class Test1 {
public static void main(String[] args) {
IntLinkedList test = new IntLinkedList(new int[]{3,5,4,6,8,2,1,4,3,2,5,3,6,3});
System.out.println("Test list: "+test);
IntLinkedList oddOnes = new IntLinkedList(), evenOnes = new IntLinkedList();
test.split(oddOnes,evenOnes);
System.out.println("Test list should be empty: "+test);
System.out.println("Odds: "+oddOnes);
System.out.println("Evens: "+evenOnes);
}
}
IntLinkedList相关方法:
public void add(IntNode node) {
if (first != null) {
node.setNext(first);
first = node;
} else {
first = node;
}
}
public void split(IntLinkedList odds, IntLinkedList evens) {
IntNode curr = first;
if (curr != null) {
if (curr.getData() % 2 == 0) {
evens.add(curr);
} else {
odds.add(curr);
}
System.out.println(curr.getData());
remove(0);
split(odds, evens);
}
}
public void remove(int index) {
IntNode curr = first;
IntNode past = null;
int currIndex = 0;
while (curr != null && currIndex < index) {
past = curr;
curr = curr.getNext();
currIndex++;
}
if (past == null && curr != null && index > -1) {
first = first.getNext();
curr.setNext(null);
} else if (curr != null && index > -1) {
past.setNext(curr.getNext());
}
}
内部节点:
public class IntNode {
private int number;
private IntNode nextInt;
public IntNode(int number) {
this.number = number;
}
public IntNode(int number, IntNode next) {
this.number = number;
this.nextInt = next;
}
public IntNode getNext() {
return nextInt;
}
public void setNext(IntNode nextInt) {
this.nextInt = nextInt;
}
public int getData() {
return number;
}
}
您必须先删除当前节点,然后才能将其添加到奇数或偶数列表中。否则,您将在 "add" 方法调用处修改源列表。
System.out.println(curr.getData());
remove(0);
if (curr.getData() % 2 == 0) {
evens.add(curr);
} else {
odds.add(curr);
}
split(odds, evens);
这是一项学校作业,谁能指出我正确的方向。我正在尝试使用递归在奇数和偶数之间拆分链表,但 .add(IntNode) 似乎有问题,它在前 2 个节点之间交替,就像它正在覆盖它一样。我已经解决了所有我能想到的问题,看来我使用 add 不正确。我必须编辑赔率和偶数方法并将原始链表留空。
这是我的代码,如有任何帮助,我们将不胜感激。
测试代码:
public class Test1 {
public static void main(String[] args) {
IntLinkedList test = new IntLinkedList(new int[]{3,5,4,6,8,2,1,4,3,2,5,3,6,3});
System.out.println("Test list: "+test);
IntLinkedList oddOnes = new IntLinkedList(), evenOnes = new IntLinkedList();
test.split(oddOnes,evenOnes);
System.out.println("Test list should be empty: "+test);
System.out.println("Odds: "+oddOnes);
System.out.println("Evens: "+evenOnes);
}
}
IntLinkedList相关方法:
public void add(IntNode node) {
if (first != null) {
node.setNext(first);
first = node;
} else {
first = node;
}
}
public void split(IntLinkedList odds, IntLinkedList evens) {
IntNode curr = first;
if (curr != null) {
if (curr.getData() % 2 == 0) {
evens.add(curr);
} else {
odds.add(curr);
}
System.out.println(curr.getData());
remove(0);
split(odds, evens);
}
}
public void remove(int index) {
IntNode curr = first;
IntNode past = null;
int currIndex = 0;
while (curr != null && currIndex < index) {
past = curr;
curr = curr.getNext();
currIndex++;
}
if (past == null && curr != null && index > -1) {
first = first.getNext();
curr.setNext(null);
} else if (curr != null && index > -1) {
past.setNext(curr.getNext());
}
}
内部节点:
public class IntNode {
private int number;
private IntNode nextInt;
public IntNode(int number) {
this.number = number;
}
public IntNode(int number, IntNode next) {
this.number = number;
this.nextInt = next;
}
public IntNode getNext() {
return nextInt;
}
public void setNext(IntNode nextInt) {
this.nextInt = nextInt;
}
public int getData() {
return number;
}
}
您必须先删除当前节点,然后才能将其添加到奇数或偶数列表中。否则,您将在 "add" 方法调用处修改源列表。
System.out.println(curr.getData());
remove(0);
if (curr.getData() % 2 == 0) {
evens.add(curr);
} else {
odds.add(curr);
}
split(odds, evens);