List单链表反转

本文详细解析了一种链表反转算法的实现过程,通过C++模板类的方式,展示了如何创建和操作链表,以及如何通过迭代方式实现链表的反转。文章强调了链表初始化时first指针的正确设置,并提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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是模板形参,不能带默认值。

转载于:https://www.cnblogs.com/YipWingTim/archive/2011/11/05/2236807.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值