不交换数据交换单链表中节点的程序

2025年3月17日 | 阅读 10 分钟

说明

在此程序中,我们需要在单链表中交换给定的两个节点,而不交换数据。

Program to swap nodes in a singly linked list without swapping data

完成此任务的方法之一是交换给定两个节点的父节点,然后交换两个节点的子节点。

算法

  1. 创建一个名为 Node 的类,它有两个属性:data 和 next。Next 是指向链表中下一个节点的指针。
  2. 创建另一个名为 SwapNodes 的类,它有两个属性:head 和 tail。
  3. addNode() 将向列表添加一个新节点
    1. 创建一个新节点。
    2. 它首先检查 head 是否等于 null,这意味着列表为空。
    3. 如果列表为空,则 head 和 tail 都将指向新添加的节点。
    4. 如果列表不为空,新节点将添加到列表末尾,使得 tail 的 next 指向新添加的节点。此新节点将成为列表的新 tail。
  4. swap() 将交换列表中存在的给定两个节点
    1. 设 n1 和 n2 是需要交换的值。
    2. 如果列表为空,则从函数返回。
    3. 如果 n1 和 n2 相等,则列表不会有任何改变。
    4. 如果列表不为空,则通过遍历列表来搜索 n1,使得 prevNode1 指向 node1 的前一个节点,node1 指向具有值 n1 的节点。
    5. 类似地,通过遍历列表来搜索 n2,使得 prevNode2 指向 node2 的前一个节点,node2 指向具有值 n2 的节点。
    6. 如果 prevNode1 指向 head,则 node2 将成为列表的 head。类似地,如果 prevNode2 指向 head,则 node1 将成为列表的 head。
    7. 如果 prevNode1 或 prevNode2 未指向 head,则交换节点,使得 prevNode1 成为 node2 的前一个节点,prevNode2 成为 node1 的前一个节点。
    8. 现在,交换 node1 和 node2 的下一个节点。
  5. display() 将显示列表中存在的节点
    1. 定义一个节点 current,它最初将指向列表的 head。
    2. 遍历列表直到 current 指向 null。
    3. 通过使 current 在每次迭代中指向它的下一个节点来显示每个节点。

解决方案

Python

输出

Original list: 
1 2 3 4 5 
List after swapping nodes: 
1 5 3 4 2 

C

输出

Original list: 
1 2 3 4 5 
List after swapping nodes: 
1 5 3 4 2 

JAVA

输出

Original list: 
1 2 3 4 5 
List after swapping nodes: 
1 5 3 4 2 

C#

输出

Original list: 
1 2 3 4 5 
List after swapping nodes: 
1 5 3 4 2 

PHP

输出

Original list: 
1 2 3 4 5 
List after swapping nodes: 
1 5 3 4 2 
 
下一主题#