反转一个单链表,分别以迭代和递归的形式来实现
迭代法:
1 // 反转单链表.cpp : 定义控制台应用程序的入口点。 2 3 #include "stdafx.h" 4 #include <stdlib.h> 5 6 typedef struct node 7 { 8 int data; 9 struct node *next; 10 }linknode,*linklist; 11 12 linknode *reverse(linknode *head)//带有头结点的单链表迭代反转,非递归方法 13 //思路:将当前结点的next指向前驱;当前结点指向next 14 { 15 if(head==NULL) 16 return 0; 17 linknode *pre,*cur,*ne;//pre 前驱结点指针;cru当前结点指针;ne后继指针 18 pre=head; 19 cur=head->next; 20 while(cur!=NULL) 21 { 22 ne=cur->next; 23 cur->next=pre; 24 pre=cur; 25 cur=ne; 26 } 27 linknode *q; 28 q=head->next; 29 q->next=NULL; 30 head->next=pre; 31 return head; 32 } 33 34 void printLinkList_H(linklist L) //打印 35 { 36 linklist p; 37 p=L->next; 38 while(p) 39 { 40 printf("%4d", p->data); 41 p = p->next; 42 } 43 printf("\n"); 44 } 45 46 void main() 47 { 48 int i; 49 linklist L = (linklist)malloc(sizeof(linknode)); 50 L->next = NULL; //头结点 51 for(i = 1;i<=5;i++)//新建一个带头结点的单链表 52 { 53 linklist p = (linklist)malloc(sizeof(linknode)); 54 p->data = i; 55 p->next = L->next; 56 L->next = p; 57 } 58 printLinkList_H(L); 59 reverse(L); 60 printLinkList_H(L); 61 }
递归法:
1 // 反转单链表.cpp 递归法 2 3 #include "stdafx.h" 4 #include <stdlib.h> 5 6 typedef struct node 7 { 8 int data; 9 struct node *next; 10 }linknode,*linklist; 11 12 13 linknode *RecReverseList(linknode *head) 14 { 15 if (head==NULL) 16 return 0; 17 linknode *curr , *reverse_head , *temp; 18 if(head->next==NULL) 19 return head; 20 else 21 { 22 curr=head; 23 temp=head->next; 24 reverse_head=RecReverseList(temp); 25 } 26 temp->next=curr; 27 curr->next=NULL; 28 return reverse_head; 29 } 30 31 void printLinkList_H(linklist L) //打印 32 { 33 linklist p; 34 p=L->next; 35 while(p) 36 { 37 printf("%4d", p->data); 38 p = p->next; 39 } 40 printf("\n"); 41 } 42 43 44 void main() 45 { 46 int i; 47 linklist L = (linklist)malloc(sizeof(linknode)); 48 L->next = NULL; //头结点 49 for(i = 1;i<=5;i++)//新建一个带头结点的单链表 50 { 51 linklist p = (linklist)malloc(sizeof(linknode)); 52 p->data = i; 53 p->next = L->next; 54 L->next = p; 55 } 56 printLinkList_H(L); 57 linklist q; 58 q=RecReverseList(L->next); 59 while(q) 60 { 61 printf("%4d", q->data); 62 q = q->next; 63 } 64 }
转载于:https://www.cnblogs.com/xingele0917/archive/2012/10/04/2711641.html
反转一个单链表,分别以迭代和递归的形式来实现相关推荐
- Python3 反转一个单链表
Python3 反转一个单链表 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1-&g ...
- 反转一个单链表(Java)
看到反转链表,可能第一时间的想法便是遍历一遍这个单链表,然后把链表里的元素都取出来,放到一个数组里,然后逆置这个数组.这个想法是错的!!! 所以什么是反转链表呢?见下图: 反转一个单链表,我们需要的是 ...
- [Leetcode][第206题][JAVA][反转一个单链表][递归][迭代]
[问题描述][简单] [解答思路] 1. 递归 自底向上 基本条件/终止条件:当前节点或者下一个节点==null 递推关系: head.next.next = head 在函数内部,改变节点的指向,也 ...
- 【图文解析】反转一个单链表
目录 例题描述
- 单链表——判断一个单链表中是否有环
2019独角兽企业重金招聘Python工程师标准>>> package jxau.lyx.link;/*** * @author: liyixiang* @data:2014-10- ...
- 用一个单链表L实现一个队列(算法导论第十章10.2-3)
用一个单链表L实现一个队列(算法导论第十章10.2-3) template<typename T> class HalfNode {public:T key;HalfNode* next; ...
- 用一个单链表L实现一个栈(算法导论第十章10.2-2题)
用一个单链表L实现一个栈(算法导论第十章10.2-2题) template<typename T> class HalfNode {public:T key;HalfNode* next; ...
- 判断一个单链表中是否存在环
#判断一个单链表中是否存在 环. #设置两个指针(fast, slow),初始值都指向头,slow每次前进1步,fast每次前进2步, 大概的思路如下: 如果链表存在环,则fast必定先进入环,而sl ...
- c语言,递归翻转一个单链表,c实现单链表
目的:主要是练习c里面单链表的实现,递归思想复习; #include <stdlib.h> #include <stdio.h>typedef struct _Node{//定 ...
最新文章
- 枚举 ---- Codeforces Round #711 (Div. 2) D. Bananas in a Microwave[枚举暴力+思维优化]
- My FioriTest navigation from master page to detail page
- 20 个使用 Java CompletableFuture的例子
- C 之父:精通C 很难,但你一天之内就能学习使用C
- jQuery中国各个省份地图分部代码
- STM32F1笔记(九)通用定时器
- leetcode42 --- trap
- 不刷新改变URL: pushState + Ajax
- eclipse和mysql创建ssm_Eclipse下SSM项目的搭建
- 计算机程序编辑的英语,编译程序是为把高级语言书写的计算机程序翻译成面向计算机的目标程序而使用的计算机程序...
- 重复代码检查工具simian的基本用法
- 论文阅读:Time2Graph+: Bridging Time Series and Graph Representation Learning via Multiple Attentions
- notepad++打开bin文件
- 警告: A docBase E:/Tomcat/webapps/Test inside the host appBase has been specified, and will be ignored
- Git命令提交项目代码
- 【详细教程】App inventor连接阿里云平台(APP显示STM32发来的温湿度数据等)
- 第三十七章 立方体贴图总结
- TI 高精度实验室《运算放大器系列--稳定性分析》
- 360、搜狗、必应搜索引擎排名规则与SEO优化怎么做?
- java编译字节码转化程序下载_编译Java Application源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为( )...