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

原文:https://www . geesforgeks . org/c-program-for-move-last-element-to-front-给定链表-2/

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

  1. 将倒数第二个设为最后一个(倒数第二个->下一个=空)。
  2. 将倒数第二个设置为标题(最后->下一个= *head_ref)。
  3. 将最后一个作为标题(*head_ref =最后一个)。

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

详情请参考完整文章将最后一个元素移到给定链表的前面!