链表逆序,是面试常见的考题。今天我的Manager居然给我出了这道题(说是再招聘其他人以我的水平做参照!),我做的可是漏洞百出啊,闲来整理了一下代码用C#的实现,以备今后面试之用。
// 链表类
class LL { public string value; public LL link; // used for outputing the link data public void OutPut() { Console.Write(value); if (link != null) { Console.Write(","); link.OutPut(); } } }逆序:
private LL Revert(LL t) { LL newList = null; while (t != null) { LL mid = new LL(); mid.value = t.value; mid.link = newList;newList = mid;
t = t.link; } return newList; } 全部代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _08ConsoleTest { class Program { static void Main(string[] args) { Test t = new Test(); t.T1(); } } public class Test { public void T1() { // Create a Link LL l = CreateLL("A"); LL l2 = CreateLL("B"); l.link = l2; l2.link = CreateLL("C"); OutputLL(l); // Output the original link: A B C LL revertLL = Revert(l); OutputLL(revertLL); // Output the target link: C B A OutputLL(l); // Output the original link: A B C (The original link will not change) } private void OutputLL(LL l) { l.OutPut(); Console.WriteLine("---------------"); } private LL Revert(LL t) { LL newList = null; while (t != null) { LL mid = new LL(); mid.value = t.value; mid.link = newList; newList = mid; t = t.link; } return newList; } private LL CreateLL(string a) { LL l = new LL(); l.value = a; return l; } } // 链表类 class LL { public string value; public LL link; // used for outputing the link data public void OutPut() { Console.Write(value); if (link != null) { Console.Write(","); link.OutPut(); } } }}