List单链表反转

View Code
 1 //ListReverse
2
3 #include<iostream>
4 using namespace std;
5
6 template<class Type> class List
7 {
8 private:
9 template<class T> class LinkNode
10 {
11 public:
12 Type data;
13 LinkNode<Type>* link;
14 LinkNode(LinkNode<Type> *ptr=NULL)
15 {
16 link=ptr;
17 }
18 LinkNode(const Type& item,LinkNode<Type>* ptr=NULL) //注意构造函数这里不能写<Type>
19 {
20 data=item;
21 link=ptr;
22 }
23 };
24 LinkNode<Type>* first;
25
26 public:
27 List()
28 {
29 first=new LinkNode<Type>; //如果这里写first=NULL,那么后面很多不会成立。比如first->link就不存在了。
30 }
31
32 void input(const Type& end)
33 {
34 LinkNode<Type> *curr=first;
35 Type val;
36 cin>>val;
37 while(val!=end)
38 {
39 LinkNode<Type> *newNode=new LinkNode<Type>(val);
40 curr->link=newNode;
41 curr=newNode;
42 cin>>val;
43 }
44 }
45
46 void output()
47 {
48 LinkNode<Type> *curr=first->link;
49 while(curr!=NULL)
50 {
51 cout<<curr->data<<"";
52 curr=curr->link;
53 }
54 cout<<endl;
55 }
56
57 void reverse()
58 {
59 LinkNode<Type> *curr,*next,*third;
60 curr=first->link;
61 while(curr->link!=NULL)
62 {
63 next=curr->link;
64 third=next->link;
65 next->link=first->link;
66 first->link=curr->link;
67 curr->link=third;
68
69 }
70 }
71 };
72
73 int main()
74 {
75 List<int> list;
76 list.input(-1);
77 list.reverse();
78 list.output();
79 }

循环链表一次一次即可了。注意first指针的指向。

 

还有初始化链表的时候,一定要注意first指针是要LinkNode形式的,这样它才能有link,还要注意一点就是Type是模板形参,不能带默认值。

posted @ 2011-11-05 02:22  YipWingTim  阅读(677)  评论(0编辑  收藏  举报