链表交换两个结点java
时间: 2024-10-01 14:13:18 浏览: 26
链表中交换两个节点通常涉及到修改两个节点的指针,使其指向对方,而保留原链表的结构。在Java中,我们可以创建一个辅助函数来完成这个操作。以下是一个简单的示例:
```java
public class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
this.next = null;
}
}
public void swapNodes(ListNode head, ListNode node1, ListNode node2) {
if (node1 == null || node2 == null || head == null) {
return; // 如果节点不存在或头节点为空,则无需交换
}
// 找到node1和node2的前一个节点
ListNode prev1 = head;
ListNode prev2 = head;
while (prev1.next != node1 && prev2.next != node2) {
prev1 = prev1.next;
prev2 = prev2.next;
}
if (prev1.next == node1 && prev2.next == node2) { // 确保找到了正确的节点
// 临时保存node1的下一个节点
ListNode temp = node1.next;
// 更新指针
node1.next = node2.next;
node2.next = temp;
// 如果node2原本是最后一个节点,还需要将其与head的连接恢复
if (prev2.next == node2) {
prev2.next = node1;
}
}
}
```
在这个例子中,`swapNodes`函数接受链表的头节点以及需要交换的两个节点作为输入。它首先检查节点是否存在,然后找到它们的前一个节点。最后,通过改变节点的next指针,实现了节点值的交换。
阅读全文