程序在单链表中交换节点而不交换数据解释在这个程序中,我们需要交换单链表中给定的两个节点,而不交换数据。 ![程序在单链表中交换节点而不交换数据](https://static.javatpoint.com/programs/images/program-to-swap-nodes-in-a-singly-linked-list-without-swapping-data.png) 完成此任务的方法之一是交换给定两个节点中的前一个节点,然后交换两个节点中的下一个节点。 算法
- 创建一个类Node,它有两个属性:data和next。Next是指向列表中下一个节点的指针。
- 创建另一个类SwapNodes,它有两个属性:head和tail。
- addNode()将向列表中添加一个新节点:
- 创建一个新节点。
- 它首先检查,头是否等于空,这意味着列表是空的。
- 如果列表为空,则头和尾都指向新添加的节点。
- 如果列表不为空,则新节点将被添加到列表的末尾,这样tail的next将指向新添加的节点。这个新节点将成为列表的新尾部。
- Swap()将交换列表中给定的两个节点:
- 设n1和n2是需要交换的值。
- 如果列表为空,则从函数返回。
- 如果n1和n2相等,那么列表中就不会有变化。
- 如果列表不是空的,那么通过遍历列表来搜索n1,使得prevNode1指向node1之前的节点,节点1指向值为n1的节点。
- 类似地,通过遍历列表来搜索n2,使得prevNode2指向node2之前的节点,而node2指向值为n2的节点。
- 如果prevNode1指向head,则node2将成为列表的head。类似地,如果prevNode2指向head,则node1将成为列表的head。
- 如果prevNode1或prevNode2不指向head,则交换节点,使prevNode1成为node2的前一个节点,prevNode2成为node1的前一个节点。
- 现在,交换node1和node2的下一个节点。
- Display()将显示列表中存在的节点:
- 定义一个节点电流,它将最初指向列表的头部。
- 遍历列表,直到当前指向null。
- 在每次迭代中,通过使current指向它旁边的节点来显示每个节点。
解决方案Python
输出:
原列表:1 2 3 4 5交换节点后列表:1 5 3 4 2
C
输出:
原列表:1 2 3 4 5交换节点后列表:1 5 3 4 2
JAVA
输出:
原列表:1 2 3 4 5交换节点后列表:1 5 3 4 2
c#
输出:
原列表:1 2 3 4 5交换节点后列表:1 5 3 4 2
PHP
输出:
原列表:1 2 3 4 5交换节点后列表:1 5 3 4 2
|