大王女王大人若是看不懂的话,请把注释去掉。
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(); } } } }