zoukankan      html  css  js  c++  java
  • 单链表反转

    大王女王大人若是看不懂的话,请把注释去掉。

    using System;
    
    namespace ConsoleApplication10
    {
        class Program
        {
            static void Main(string[] args)
            {
                Node headNode = new Node(0);
                Node preNode = headNode;
                Node currentNode;
                for (int i = 1; i < 10; i++)
                {
                    currentNode = new Node(i);
                    preNode.nextNode = currentNode;
                    preNode = currentNode;
                }
                headNode.outPut();
                Console.WriteLine("---------------------翻转后---------------------");
    
                ////这里不加ref的话,会拷贝一份指针进方法,导致headNode的值不被改变
                reverse(ref headNode);
                headNode.outPut();
    
                Console.Read();
            }
            public static void reverse(ref Node head)
            {
                if (head != null && head.nextNode !=null)
                {
                    Node pre = head;
                    Node current = head.nextNode;
                    Node next;
    
                    //Console.WriteLine("最初:  pre:" + pre.number.ToString() + "  current:" + current.number.ToString());
                    //Console.WriteLine("---------------------");
    
                    pre.nextNode = null;
                    while (current != null)
                    {
                        next = current.nextNode;
                        //Console.WriteLine("翻转指针前:   pre:" + pre.number.ToString() + "  current:" + (current != null ? current.number.ToString() : string.Empty) + "   next:" + (next != null ? next.number.ToString() : string.Empty));
    
                        current.nextNode = pre;
                        pre = current;
                        current = next;
    
                        //Console.WriteLine("翻转指针后:   pre:" + pre.number.ToString() + "  current:" + (current != null ? current.number.ToString() : string.Empty) + "   next:" + (next != null ? next.number.ToString() : string.Empty));
                        //Console.WriteLine("---------------------");
    
                    }
                    head = pre;
                }
            }
        }
        class Node
        {
            public Node(int i)
            {
                this.number = i;
            }
            public int number;
            public Node nextNode;
            public void outPut()
            {
                Console.WriteLine(this.number);
                if (this.nextNode != null)
                {
                    this.nextNode.outPut();
                }
            }
        }
    }
  • 相关阅读:
    Tarjan算法求解桥和边双连通分量(附POJ 3352 Road Construction解题报告)
    无向图求点割集的算法
    hdu 2121无根最小树形图要建一个虚拟节点
    hdu 1576扩展欧几里得算法
    欧几里德算法的扩展-求解不定方程
    hdu 3072 强连通+缩点+最小树形图思想
    1352 集合计数 扩展欧几里德算法
    1247 可能的路径 逆向思维
    Atcoder B
    C. Timofey and a tree 观察题 + dfs模拟
  • 原文地址:https://www.cnblogs.com/JingG/p/3101981.html
Copyright © 2011-2022 走看看