将单链表的最后一个元素与第一个元素交换的程序

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

说明

在此程序中,我们需要将单链表的最后一个节点与第一个节点进行互换,使得第一个节点成为最后一个节点,最后一个节点成为第一个节点。

Program to swap the last element of the singly linked list from the first one

以上面的例子为例,节点1代表链表的头,节点4代表最后一个节点。要将第一个节点与最后一个节点互换,我们将遍历链表,使得index指向倒数第二个节点,current指向最后一个节点。Node temp将指向head。然后,将current(最后一个节点)设置为链表的新head。现在,将旧head之后的所有列表移动并附加到新head之后。最后,在index节点(倒数第二个节点)之后添加temp(旧head节点)。

算法

  1. 创建一个名为 Node 的类,它有两个属性:data 和 next。Next 是指向链表中下一个节点的指针。
  2. 创建另一个名为Swap的类,该类有两个属性:head和tail。
  3. addNode() 将向列表添加一个新节点
    1. 创建一个新节点。
    2. 它首先检查 head 是否等于 null,这意味着列表为空。
    3. 如果列表为空,则 head 和 tail 都将指向新添加的节点。
    4. 如果列表不为空,新节点将添加到列表末尾,使得 tail 的 next 指向新添加的节点。此新节点将成为列表的新 tail。
  4. SwapFirstWithLast() 函数将交换第一个节点与最后一个节点。
    1. 如果列表为空,则从函数返回。
    2. 如果列表不为空,则遍历列表,使得current节点指向列表的最后一个节点,index节点指向倒数第二个节点。
    3. 检查列表是否只包含一个节点,如果是,则无法进行交换。
    4. 如果列表只包含两个节点,则使用节点temp交换head节点与current节点。
    5. 否则,temp将指向head,而之前指向最后一个节点的current将成为列表的新head。
    6. 移动除了旧head节点之外的列表,并将其附加到新head之后,即head.next = temp.next
    7. 现在,将temp(第一个)节点添加到index节点之后,使其成为列表的最后一个节点,其下一个节点将为null。
  5. display() 将显示列表中存在的节点
    1. 定义一个节点 current,它最初将指向列表的 head。
    2. 遍历列表直到 current 指向 null。
    3. 通过使 current 在每次迭代中指向它的下一个节点来显示每个节点。

解决方案

Python

输出

 Originals list: 
1 2 3 4 
List after swapping the first node with last:
4 2 3 1 

C

输出

Originals list: 
1 2 3 4 
List after swapping the first node with last:
4 2 3 1 

JAVA

输出

Originals list: 
1 2 3 4 
List after swapping the first node with last:
4 2 3 1 

C#

输出

Originals list: 
1 2 3 4 
List after swapping first node with last: 
4 2 3 1 

PHP

输出

Originals list: 
1 2 3 4 
List after swapping first node with last: 
4 2 3 1 
 
下一主题#