📌  相关文章
📜  用于将最后一个元素移动到给定链表前面的Java程序(1)

📅  最后修改于: 2023-12-03 14:56:20.704000             🧑  作者: Mango

将最后一个元素移动到给定链表前面的Java程序

本文将向你介绍如何使用Java编写一个函数,将链表中的最后一个元素移动到第一个元素的前面。

实现思路

我们需要遍历一遍链表,找到最后一个元素和倒数第二个元素,然后将最后一个元素移到第一个元素之前即可。链表的节点可以定义为一个简单的包含数据和下一个节点的类。

代码实现
public class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

public ListNode moveLastToFront(ListNode head) {
    // 判断链表是否为空或只有一个元素
    if(head == null || head.next == null) {
        return head;
    }
    
    ListNode p = head;
    ListNode q = head;
    ListNode pre = null;
    // p指向最后一个节点,q指向倒数第二个节点
    while(p.next != null) {
        pre = q;
        q = p;
        p = p.next;
    }
    // 将最后一个节点移到第一个节点前面
    pre.next = null;
    p.next = head;
    head = p;
    return head;
}

以上代码中,我们使用了三个指针p、q、pre,其中p指向最后一个节点,q指向倒数第二个节点,pre指向q的前一个节点。在遍历链表时,我们通过移动这三个指针来找到最后一个节点和倒数第二个节点。然后,我们将最后一个节点(即p)移到第一个节点(即head)的前面即可。具体实现方式是,将最后一个节点的next指针指向head,然后将head指向最后一个节点,最后将倒数第二个节点(即pre)的next指针设为null。

测试示例
public static void main(String[] args) {
    // 创建链表 1 -> 2 -> 3 -> 4 -> 5
    ListNode head = new ListNode(1);
    head.next = new ListNode(2);
    head.next.next = new ListNode(3);
    head.next.next.next = new ListNode(4);
    head.next.next.next.next = new ListNode(5);
    
    // 移动最后一个节点到第一个节点前面
    head = moveLastToFront(head);
    
    // 打印结果 5 -> 1 -> 2 -> 3 -> 4
    while(head != null) {
        System.out.print(head.val + " -> ");
        head = head.next;
    }
}
总结

本文向你展示了如何使用Java编写一个函数,将链表中的最后一个元素移动到第一个元素的前面。通过遍历链表,找到最后一个节点和倒数第二个节点,然后改变它们的指针,就能完成这个操作。