📅  最后修改于: 2023-12-03 14:56:20.704000             🧑  作者: Mango
本文将向你介绍如何使用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编写一个函数,将链表中的最后一个元素移动到第一个元素的前面。通过遍历链表,找到最后一个节点和倒数第二个节点,然后改变它们的指针,就能完成这个操作。