将链表逆序(Revert)的C#实现
链表逆序,是面试常见的考题。今天我的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();
}
}
}
}
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();
}
}
}
}