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

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

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

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

  1. 使倒数第二个倒数第二个(secLast->next = NULL)。
  2. 将最后一个的下一个设置为头(last->next = *head_ref)。
  3. 将最后一个作为头部(*head_ref = last)。
C#
/* C# Program to move last element to 
   front in a given linked list */
using System;
class LinkedList 
{ 
    // Head of list 
    Node head; 
  
    // Linked list Node
    public class Node 
    { 
        public int data; 
        public Node next; 
        public 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) 
        { 
        Console.Write(temp.data+" "); 
        temp = temp.next; 
        } 
        Console.WriteLine(); 
    } 
  
    // 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); 
          
        Console.WriteLine(
                "Linked List before moving last to front "); 
        llist.printList(); 
          
        llist.moveToFront(); 
          
        Console.WriteLine(
                "Linked List after moving last to front "); 
        llist.printList(); 
    } 
} 
// This code is contributed by Arnab Kundu


输出:

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 是给定链表中的节点数。

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