链表逆序的循环实现和递归实现
链表逆序:
一个链表的结点结构
struct Node
{
int data ;
Node *next ;
};
typedef struct Node Node ;
已知链表的头结点head,写一个函数把这个链表逆序 ( Intel)。
链表逆序是笔试中链表测试的经典题,这次自己写了一下代码,分别用循环和递归方法做两种实现,记录在此。
1
#include <iostream>
2
using
namespace std;
3
4
struct Node
5
{
6
int data ;
7
Node *next ;
8
};
9
//
链表反序的循环实现
10
Node * ReverseList(Node *head)
11
{
12
Node * p1 = NULL;//p1代表链表被反序好的部分的头结点
13
Node * p2 = head;//p2代表链表还没有被反序部分的头结点
14
while(p2)
15
{
16
Node * pTemp = p2->next;
17
p2->next = p1;
18
p1 = p2;
19
p2 = pTemp;
20
}
21
return p1;
22
}
23
//
链表反序的递归实现
24
Node * ReverseList_DG(Node *head,Node * last=NULL)
25
{
26
//last代表链表被反序好的部分的头结点,head代表链表还没有被反序部分的头结点
27
if (head == NULL) return last;
28
Node * pTemp = head->next;
29
head->next = last;
30
ReverseList_DG(pTemp,head);
31
}
32
33
int main(
int argc,
char* argv[])
34
{
35
Node * pHead = new Node,*pTemp;
36
pHead->data = 0;
37
pHead->next = NULL;
38
for (int i=1;i<10;++i)
39
{
40
pTemp = new Node;
41
pTemp->data = i;
42
pTemp->next = pHead;
43
pHead = pTemp;
44
}
45
//打印出原始链表
46
pTemp = pHead;
47
while(pTemp)
48
{
49
cout<<pTemp->data<<",";
50
pTemp = pTemp->next;
51
}
52
cout<<endl;
53
//循环法反序链表并输出
54
pHead = ReverseList(pHead);
55
pTemp = pHead;
56
while(pTemp)
57
{
58
cout<<pTemp->data<<",";
59
pTemp = pTemp->next;
60
}
61
cout<<endl;
62
//递归法反序链表并输出
63
pHead = ReverseList_DG(pHead);
64
pTemp = pHead;
65
while(pTemp)
66
{
67
cout<<pTemp->data<<",";
68
pTemp = pTemp->next;
69
}
70
cout<<endl;
71
72
return 0;
73
}
#include <iostream>
2
using
namespace std;
3
4
struct Node
5
{6
int data ;7
Node *next ;8
};
9
//
链表反序的循环实现
10
Node * ReverseList(Node *head)
11
{12
Node * p1 = NULL;//p1代表链表被反序好的部分的头结点13
Node * p2 = head;//p2代表链表还没有被反序部分的头结点14
while(p2)15
{16
Node * pTemp = p2->next;17
p2->next = p1;18
p1 = p2;19
p2 = pTemp;20
}21
return p1;22
}
23
//
链表反序的递归实现
24
Node * ReverseList_DG(Node *head,Node * last=NULL)
25
{26
//last代表链表被反序好的部分的头结点,head代表链表还没有被反序部分的头结点27
if (head == NULL) return last; 28
Node * pTemp = head->next; 29
head->next = last; 30
ReverseList_DG(pTemp,head);31
}
32
33
int main(
int argc,
char* argv[])
34
{ 35
Node * pHead = new Node,*pTemp;36
pHead->data = 0;37
pHead->next = NULL;38
for (int i=1;i<10;++i)39
{40
pTemp = new Node;41
pTemp->data = i;42
pTemp->next = pHead;43
pHead = pTemp;44
}45
//打印出原始链表46
pTemp = pHead;47
while(pTemp)48
{49
cout<<pTemp->data<<",";50
pTemp = pTemp->next;51
}52
cout<<endl;53
//循环法反序链表并输出54
pHead = ReverseList(pHead);55
pTemp = pHead;56
while(pTemp)57
{58
cout<<pTemp->data<<",";59
pTemp = pTemp->next;60
}61
cout<<endl;62
//递归法反序链表并输出63
pHead = ReverseList_DG(pHead);64
pTemp = pHead;65
while(pTemp)66
{67
cout<<pTemp->data<<",";68
pTemp = pTemp->next;69
}70
cout<<endl; 71
72
return 0;73
}
本文介绍了一种链表逆序的实现方法,包括循环和递归两种方式,并提供了详细的代码示例。
471

被折叠的 条评论
为什么被折叠?



