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

📅  最后修改于: 2022-05-13 01:55:14.928000             🧑  作者: Mango

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

编写一个函数,将给定单链表中的最后一个元素移到前面。例如,如果给定的链表是 1->2->3->4->5,那么函数应该将链表更改为 5->1->2->3->4。
算法:
遍历列表直到最后一个节点。使用两个指针:一个存储最后一个节点的地址,另一个存储倒数第二个节点的地址。循环结束后进行以下操作。

  1. 使倒数第二个倒数第二个(secLast->next = NULL)。
  2. 将最后一个的下一个设置为头(last->next = *head_ref)。
  3. 将最后一个作为头部(*head_ref = last)。
Java
/* Java Program to move last element to 
   front in a given linked list */
class LinkedList
{
    // Head of list
    Node head;  
   
    // Linked list Node
    class Node
    {
        int data;
        Node next;
        Node(int d) 
        {
            data = d; 
            next = null; 
        }
    }
  
    void moveToFront()
    {
        /* If linked list is empty or 
           it contains only one node 
           then simply return. */
           if(head == null || 
              head.next == null) 
              return;
  
        /* Initialize second last and 
           last pointers */
        Node secLast = null;
        Node last = head;
  
        /* After this loop secLast contains 
           address of second last  node and 
           last contains address of last node 
           in Linked List */
        while (last.next != null)  
        {
           secLast = last;
           last = last.next; 
        }
  
        // Set the next of second last as null 
        secLast.next = null;
  
        // Set the next of last as head 
        last.next = head;
  
        // Change head to point to 
        // last node. 
        head = last;
    }              
  
     // Utility functions 
    /* Inserts a new Node at front 
       of the list. */
    public void push(int new_data)
    {
        /* 1 & 2: Allocate the Node &
                  Put in the data*/
        Node new_node = new Node(new_data);
   
        // 3. Make next of new Node as head 
        new_node.next = head;
   
        // 4. Move the head to point to 
        // new Node 
        head = new_node;
    }
  
    // Function to print linked list 
    void printList()
    {
        Node temp = head;
        while(temp != null)
        {
           System.out.print(temp.data + " ");
           temp = temp.next;
        }  
        System.out.println();
    }
  
    // Driver code
    public static void main(String args[])
    {
        LinkedList llist = new LinkedList();
  
        /* Constructed Linked List is 
           1->2->3->4->5->null */
        llist.push(5);
        llist.push(4);
        llist.push(3);
        llist.push(2);
        llist.push(1);
          
        System.out.println(
               "Linked List before moving last to front ");
        llist.printList();
          
        llist.moveToFront();
          
        System.out.println(
               "Linked List after moving last to front ");
        llist.printList();
    }
} 
// This code is contributed by Rajat Mishra


输出:

Linked list before moving last to front 
1 2 3 4 5 
Linked list after removing last to front 
5 1 2 3 4

时间复杂度: O(n),其中 n 是给定链表中的节点数。

有关详细信息,请参阅有关将最后一个元素移动到给定链接列表前面的完整文章!