要求如下:
有一个单向链表,你获得了它的头节点引用,用空间复杂度为O(1)的算法,将其逆序
空间复杂度为O(1)表示你可以声明单个变量,但是不能创建一个数组等集合类型
首先构建结点
1
/// <summary>
2
/// 结点类
3
/// 为方便起见,结点数据类型用int表示
4
/// </summary>
5
public class ListNode
6
{
7
public int data;
8
9
public ListNode next;
10
}
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
2
![](/Images/OutliningIndicators/InBlock.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
为了方便大家看我就不把单链表的所有实现代码都copy上了。因为网上单链表的实现c#版的已经很多了。但是我百度了一下逆序c#版的逆序还没有,这也是我为什么放在这里的原因。不多说了。看代码:
1
public class LinkList
2
{
3
private ListNode first; //第一个结点
4
public LinkList()
5
{
6
first = null;
7
}
8![](/Images/OutliningIndicators/InBlock.gif)
9
public bool IsEmpty()
10
{
11
return first == null;
12
}
13![](/Images/OutliningIndicators/InBlock.gif)
14![](/Images/OutliningIndicators/InBlock.gif)
15
/// <summary>
16
/// 逆序
17
/// </summary>
18
/// <returns></returns>
19
public void Reversion()
20
{
21
if (first == null)
22
new Exception("Empty");
23![](/Images/OutliningIndicators/InBlock.gif)
24
ListNode current = null;
25
ListNode temp;
26![](/Images/OutliningIndicators/InBlock.gif)
27
while (first != null)
28
{
29
temp = new ListNode();//构建新的结点
30
temp.data = first.data;//对结点数据进行复制
31
temp.next = current;
32
current = temp;
33
first = first.next;
34
}
35
first = current;
36![](/Images/OutliningIndicators/InBlock.gif)
37
}
38![](/Images/OutliningIndicators/InBlock.gif)
39![](/Images/OutliningIndicators/InBlock.gif)
40
/// <summary>
41
/// 在第k个元素之后插入x
42
/// </summary>
43
/// <param name="k"></param>
44
/// <param name="x"></param>
45
/// <returns></returns>
46
public LinkList Insert(int k, int x)
47
{
48
//如果不存在第k个元素,则引发异常OutOfBoundsException
49
if (k < 0)
50
throw (new Exception(" OutOfBoundsException()"));
51
52
ListNode pNode = first; //pNode将最终指向第k个结点
53
for (int index = 1; index < k && pNode != null; index++)
54
pNode = pNode.next;
55
if (k > 0 && pNode == null)
56
throw (new Exception(" OutOfBoundsException()"));//不存在第k个元素
57
ListNode xNode = new ListNode();
58
xNode.data = x;
59
if (k > 0)
60
{
61
//在pNode之后插入
62
xNode.next = pNode.next;
63
pNode.next = xNode;
64
}
65
else
66
{
67
//作为第一个元素插入
68
xNode.next = first;
69
first = xNode;
70
}
71
return this;
72
}
73![](/Images/OutliningIndicators/InBlock.gif)
74
public void Clear()
75
{
76
first = null;
77
}
78![](/Images/OutliningIndicators/InBlock.gif)
79
public void OutPut()
80
{
81
ListNode current;
82
for (current = first; current != null; current = current.next)
83
{
84
Console.Write("{0}", current.data.ToString());
85
}
86![](/Images/OutliningIndicators/InBlock.gif)
87
Console.WriteLine();
88
}
89
}
ok,可以看到我就实现了一些基本的构建单链表的方法,看看我们的主程序![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
6
![](/Images/OutliningIndicators/InBlock.gif)
7
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
8
![](/Images/OutliningIndicators/InBlock.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
35
![](/Images/OutliningIndicators/InBlock.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/InBlock.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/InBlock.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/InBlock.gif)
56
![](/Images/OutliningIndicators/InBlock.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
61
![](/Images/OutliningIndicators/InBlock.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
67
![](/Images/OutliningIndicators/InBlock.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/InBlock.gif)
70
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
71
![](/Images/OutliningIndicators/InBlock.gif)
72
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
73
![](/Images/OutliningIndicators/InBlock.gif)
74
![](/Images/OutliningIndicators/InBlock.gif)
75
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
78
![](/Images/OutliningIndicators/InBlock.gif)
79
![](/Images/OutliningIndicators/InBlock.gif)
80
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
81
![](/Images/OutliningIndicators/InBlock.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
84
![](/Images/OutliningIndicators/InBlock.gif)
85
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
86
![](/Images/OutliningIndicators/InBlock.gif)
87
![](/Images/OutliningIndicators/InBlock.gif)
88
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
89
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
1
static void Main(string[] args)
2
{
3![](/Images/OutliningIndicators/InBlock.gif)
4
LinkList list = new LinkList();
5
for (int i = 0; i < 100; i++)
6
{
7
list.Insert(i, i);
8
}
9
list.OutPut();
10![](/Images/OutliningIndicators/InBlock.gif)
11
list.Reversion();
12![](/Images/OutliningIndicators/InBlock.gif)
13
list.OutPut();
14![](/Images/OutliningIndicators/InBlock.gif)
15
Console.ReadLine();
16
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
3
![](/Images/OutliningIndicators/InBlock.gif)
4
![](/Images/OutliningIndicators/InBlock.gif)
5
![](/Images/OutliningIndicators/InBlock.gif)
6
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
7
![](/Images/OutliningIndicators/InBlock.gif)
8
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
9
![](/Images/OutliningIndicators/InBlock.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
加下来测试一些,把i的上限改变一下1,2,3......
ok,通过!