链表逆序的循环实现和递归实现
来源:互联网 发布:郭广昌 知乎 编辑:程序博客网 时间:2024/05/19 19:16
链表逆序的循环实现和递归实现
链表逆序:
一个链表的结点结构
struct Node
{
int data ;
Node *next ;
};
typedef struct Node Node ;
已知链表的头结点head,写一个函数把这个链表逆序 ( Intel)。
链表逆序是笔试中链表测试的经典题,这次自己写了一下代码,分别用循环和递归方法做两种实现,记录在此。
1#include <iostream>
2using namespace std;
3
4struct Node
5{
6 int data ;
7 Node *next ;
8};
9//链表反序的循环实现
10Node * 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//链表反序的递归实现
24Node * 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
33int 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}
2using namespace std;
3
4struct Node
5{
6 int data ;
7 Node *next ;
8};
9//链表反序的循环实现
10Node * 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//链表反序的递归实现
24Node * 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
33int 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}
- 链表逆序的循环实现和递归实现
- 单链表逆序:通过递归和循环实现。
- 两种方法实现单向链表的创建、遍历、删除、查找、逆序输出(循环法和递归法)
- C++ 递归和非递归实现链表逆序
- 单链表的逆序实现,递归和非递归算法
- 逆序单链表的递归和非递归实现
- 【数据结构】递归实现链表逆序
- 递归法实现链表逆序
- 递归实现字符串的逆序
- 递归实现字符串的逆序。
- n的阶乘,循环和递归实现
- 二分搜索的递归和循环实现
- C:单链表的循环和递归实现
- 递归方法实现逆序
- 递归方法实现逆序
- 递归方法实现逆序
- 递归方法实现逆序
- 单链表逆序-------- 递归和循环
- linux设备驱动之阻塞与非阻塞I/O
- 一步一步学android控件(之十三) —— TimePicker
- 用sin 和cos 的泰勒展开式编程序,求出sin( π/2)、sin(56°)、cos(87°)、cos( π/3)
- android背景选择器selector用法汇总
- 21天教你学会C++
- 链表逆序的循环实现和递归实现
- CSU Warm Up 2
- 显卡工作原理
- UITableView之tableHeaderView
- 二分查找小小总结
- Java Web开发——Struts2 中.action和.do的奥秘
- java从web服务器读取文件
- 异常处理 学习笔记(一)
- B. Fence