gpt4 book ai didi

java - 如何交换两个节点及其在单链表中的内容?

转载 作者:行者123 更新时间:2023-12-02 01:41:21 25 4
gpt4 key购买 nike

我用谷歌搜索了这个,但他们都在谈论“交换节点而不交换数据”。

我尝试自己写一个交换节点方法:

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);
}

这是结果 enter image description here

可以看到,currentNum1currentNum2彼此改变了,但是打印的结果没有交换。如何交换两个节点及其数据?

编辑:下面的完整示例

节点类

public class Node {

public int data;
public Node next;

public Node(int _data) {
this.data = _data;
this.next = null;
}

public String toString() {
return (Integer.toString(data));
}
}

链表类

public class LinkedList {

Node head;

public void Insert(int data) {
Node node = new Node(data);

if (head == null) {
head = node;
} else {
Node n = head;
while (n.next != null) {
n = n.next;
}
n.next = node;
}
}

public void ShowList() {
Node node = head;
while (node != null) {
System.out.print(node.data + " ");
node = node.next;
}
}

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);
}
}

测试员

public class Runner {

public static void main(String[] args) {
LinkedList lkdList = new LinkedList();

lkdList.Insert(10);
lkdList.Insert(9);
lkdList.Insert(15);
lkdList.Insert(2);
lkdList.Insert(73);

lkdList.ShowList();

lkdList.swapNodes(10, 2);

System.out.println();
System.out.println("After Swap");

lkdList.ShowList();
}

}

最佳答案

好吧,如果你只想交换数据,而不是节点,这里是:

  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;
}

关于java - 如何交换两个节点及其在单链表中的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54409048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com