C语言实现单链表逆置算法
题目:
设计算法,将单链表L就地逆置,结果如图所示:
代码:
#include<stdio.h>
#include<stdlib.h>
typedef int dataType; //数据类型为int//结点结构体
typedef struct node
{dataType data; //数据域struct node *next; //指针域
}LinkList;//初始化结点
void listInitiate(LinkList **head) //双星指针,地址的地址,在初始化时,我们要使地址的值改变,所以使用双星作为参数传入
{*head = (LinkList*)malloc(sizeof(LinkList)); //为头结点分配位置空间(一个结点的大小)(*head)->next = NULL; //头结点指针域初始默认为空
}/*尾插法建立单链表——得到的链表是顺序的
利用数组的前n个数建立一条单链表*/
void listBuildRear(LinkList *head, dataType arr[], int n)
{LinkList *p = head; //新增一个指针,用来代替head指针for (int i = 0; i < n; i++) //循环n次,每次循环都在链表尾部追加一个结点{LinkList *q = (LinkList*)malloc(sizeof(LinkList));//新建立结点,并为之分配内存空间q->data = arr[i]; //数据域赋值,将数组的第i+1个数字赋给新结点qq->next = NULL; //单链表最后一个结点的指针域都为空p->next = q; //将原始单链表最后一个结点指针域指向新结点q,从此q成为最后一个结点,原始最后一个结点变成倒数第二个结点p = q; //p又指向当前链表最后一个结点,为下一次尾部插入做准备}
}//遍历输出函数
void listPrint(LinkList *head)
{printf("单链表元素是:");LinkList *p = head; //新增一个指针,用来代替head指针while (p->next != NULL){printf("%d ", p->next->data);p = p->next; //这一句不要忘了,不然会死循环的,我总是忘掉这一句}printf("\n");
}//就地逆置函数
void ReverseList(LinkList &L)
{LinkList *p,*q;p=L.next;L.next=NULL; while(p!=NULL){q=p;p=p->next;q->next=L.next; L.next=q;}
}int main()
{LinkList link1;LinkList *p;dataType arr[] = {6,7,8,9,10};p = &link1;listInitiate(&p);listBuildRear(p,arr,5); //利用数组arr的前七个数据建立一条链表printf("原");listPrint(p); //打印原链表printf("\n就地逆置之后的");ReverseList(*p); //打印逆置后的链表listPrint(p);return 0;
}
效果图:
C语言实现单链表逆置算法相关推荐
- java数据结构之单链表逆置算法
单链表逆置算法1 设计思想:在链表类中新加成员方法getNode(int i),用来获取指定位置的节点,新建一个空单链表,将原链表的每个节点按照从后往前的顺序依次取出,再把节点的数据依次添加到新的链表 ...
- c语言实现单链表逆序算法,C语言解字符串逆序和单向链表逆序问题的代码示例...
字符串逆序上次面试碰到一个单向链表逆序的题目,幸好对字符串逆序比较熟悉,类比做出来了.字符串逆序比较简单,直接上代码: void stringReverse(char* p1,char* p2) { ...
- 【数据结构】无头节点的单链表逆置
day1 牛客网刷题 C语言实现单链表逆置 C语言实现单链表逆置 由于一段时间没有用数据结构 刚开始有些忘记了 第一次真正在牛客网上进行调试 原来还会有调试用例 还要设置边界值 如果没有 测试也不会通 ...
- C语言实现不带头结点的单链表逆置的三种方法
C语言实现不带头结点的单链表逆置的三种方法 直接循环 头插法 递归法 END! 直接循环 图片解释 ListNode* ReverseList1(ListNode *head) {if(head == ...
- c语言借助栈单链表逆置,借助栈实现单链表逆置--数据结构
标题: 借助栈实现单链表逆置 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 用链式存储实现栈的初始化.入栈.出栈.取栈顶.判栈空等操作,在主函数中借助栈的基本 ...
- 单链表逆置C语言编程实现
单链表逆置 #include<stdio.h> #include<stdlib.h> typedef struct node {char data;//data为结点的数据信息 ...
- 单链表操作10-带头结点的单链表逆置(个人学习笔记,仅供参考)
带头结点的单链表逆置 题目要求 单链表结点定义 函数接口定义 测试程序样例 输入样例 输出样例 答案 题目要求 设计算法Reverse( ),将带头结点的单链表A逆置,要求利用原有链表的链点,最后输出 ...
- 数据结构:单链表逆置
实验要求: 写出将单链表逆置的算法.即令单链表的第一个结点变为最后一个结点,第二个结点变为倒数第二个结点,-,最后一个结点变为第一个结点. 依次从键盘读入数据,逆序建立链表L: 逆置链表L(创建新的链 ...
- 单链表逆置(头插法图解)
算法思想: 首先将头结点摘下,重新构造链表,然后原链表中的结点依次头插到新链表中,如此循环,直到链表为空,即可逆置链表. 代码: //链表逆置#include<stdio.h> #incl ...
最新文章
- PingCode新成员Goals开放内测!
- RxJava Rxandroid 结合 Retrofit 使用
- 如何创建可变数量的变量?
- rust油桶用什么打_草莓用什么膨大素好?草莓膨大剂什么时间打?草莓用什么肥料膨大...
- 转:DotNET企业架构应用实践-架构师成长之路-如何成为优秀架构师
- c excel批量导入mysql数据库_Excel批量导入数据库
- 字符数组查找-----拉手笔试
- word20161219
- python if else_菜鸟笔记015 Python If ... Else
- 云码之家4年来的微信引流营销推广之路
- 手动决战3721和雅虎助手
- su室外渲染参数设置_【QA答疑】VRay3.4 for SketchUp2017 渲染参数设置
- m4a文件怎么转换成mp3?=
- Canvas: trying to draw too large bitmap 红米 k30 奔溃
- 苹果4.3该如何避免?机审人审怎么过?
- 数据中心安全域的设计和划分
- Cluster - 基本概念
- 酒浓码浓 - HTML5微数据/itemscope/itemtype/itemprop
- 混淆矩阵、ROC、AUC 学习记录
- uva 11800 Determine the Shape
热门文章
- 解决uniapp中地址授权失败
- Win10家庭版安装Docker Desktop后无法重启,强制重启后无法联网问题的解决
- Linux命令(十七) 关机命令,linux定时关机命令是什么
- 华为 手动配置链路聚合
- 在Linux上如何快速搭建MongoDB集群
- miui10 android 唤醒,小米再次推送MIUI10最新版,修复小爱同学唤醒功能,没理由不升级...
- 【死循环警告⚠】i=i++导致的死循环!
- Spring Boot 2.0系列文章(四):Spring Boot 2.0 源码阅读环境搭建
- jupiter 85 2.0
- 为啥要做接口测试?接口测试用例怎么写?哪些工具可以用?