我用谷歌搜索了這個,但他們都在談論“交換節點而不交換數據”。我嘗試自己編寫一個交換節點方法:public void swapNodes(int num1, int num2) { if(num1 == num2) { return; } Node currentNum1 = head; Node currentNum2 = head; Node waitForSwap1 = null; Node waitForSwap2 = null; while (currentNum1 != null) { if (currentNum1.data == num1) { waitForSwap1 = currentNum1; System.out.println(); System.out.println("waitForSwap 1"); System.out.println(waitForSwap1.data); } currentNum1 = currentNum1.next; } while (currentNum2 != null) { if (currentNum2.data == num2) { waitForSwap2 = currentNum2; System.out.println("waitForSwap 2"); System.out.println(waitForSwap2.data); } currentNum2 = currentNum2.next; } currentNum1 = waitForSwap2; currentNum2 = waitForSwap1; System.out.println("currentNum1"); System.out.println(currentNum1.data); System.out.println("currentNum2"); System.out.println(currentNum2.data);}這是結果如您所見,currentNum1并currentNum2相互更改,但打印結果沒有交換。如何交換兩個節點及其數據?
1 回答

侃侃爾雅
TA貢獻1801條經驗 獲得超16個贊
好的,如果你只想交換數據,而不是節點,這里是:
public void swapNodes(int num1, int num2) {
if (num1 == num2) {
return;
}
Node node1 = null;
Node node2 = null;
Node cur = head;
while(cur != null) {
if (num1 == cur.data) {
node1 = cur;
}
if (num2 == cur.data) {
node2 = cur;
}
cur = cur.next;
}
if (node1 == null || node2 == null)
return;
int tmp = node1.data;
node1.data = node2.data;
node2.data = tmp;
}
添加回答
舉報
0/150
提交
取消