题目:

设计算法,将单链表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语言实现单链表逆置算法相关推荐

  1. java数据结构之单链表逆置算法

    单链表逆置算法1 设计思想:在链表类中新加成员方法getNode(int i),用来获取指定位置的节点,新建一个空单链表,将原链表的每个节点按照从后往前的顺序依次取出,再把节点的数据依次添加到新的链表 ...

  2. c语言实现单链表逆序算法,C语言解字符串逆序和单向链表逆序问题的代码示例...

    字符串逆序上次面试碰到一个单向链表逆序的题目,幸好对字符串逆序比较熟悉,类比做出来了.字符串逆序比较简单,直接上代码: void stringReverse(char* p1,char* p2) { ...

  3. 【数据结构】无头节点的单链表逆置

    day1 牛客网刷题 C语言实现单链表逆置 C语言实现单链表逆置 由于一段时间没有用数据结构 刚开始有些忘记了 第一次真正在牛客网上进行调试 原来还会有调试用例 还要设置边界值 如果没有 测试也不会通 ...

  4. C语言实现不带头结点的单链表逆置的三种方法

    C语言实现不带头结点的单链表逆置的三种方法 直接循环 头插法 递归法 END! 直接循环 图片解释 ListNode* ReverseList1(ListNode *head) {if(head == ...

  5. c语言借助栈单链表逆置,借助栈实现单链表逆置--数据结构

    标题: 借助栈实现单链表逆置 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 用链式存储实现栈的初始化.入栈.出栈.取栈顶.判栈空等操作,在主函数中借助栈的基本 ...

  6. 单链表逆置C语言编程实现

    单链表逆置 #include<stdio.h> #include<stdlib.h> typedef struct node {char data;//data为结点的数据信息 ...

  7. 单链表操作10-带头结点的单链表逆置(个人学习笔记,仅供参考)

    带头结点的单链表逆置 题目要求 单链表结点定义 函数接口定义 测试程序样例 输入样例 输出样例 答案 题目要求 设计算法Reverse( ),将带头结点的单链表A逆置,要求利用原有链表的链点,最后输出 ...

  8. 数据结构:单链表逆置

    实验要求: 写出将单链表逆置的算法.即令单链表的第一个结点变为最后一个结点,第二个结点变为倒数第二个结点,-,最后一个结点变为第一个结点. 依次从键盘读入数据,逆序建立链表L: 逆置链表L(创建新的链 ...

  9. 单链表逆置(头插法图解)

    算法思想: 首先将头结点摘下,重新构造链表,然后原链表中的结点依次头插到新链表中,如此循环,直到链表为空,即可逆置链表. 代码: //链表逆置#include<stdio.h> #incl ...

最新文章

  1. PingCode新成员Goals开放内测!
  2. RxJava Rxandroid 结合 Retrofit 使用
  3. 如何创建可变数量的变量?
  4. rust油桶用什么打_草莓用什么膨大素好?草莓膨大剂什么时间打?草莓用什么肥料膨大...
  5. 转:DotNET企业架构应用实践-架构师成长之路-如何成为优秀架构师
  6. c excel批量导入mysql数据库_Excel批量导入数据库
  7. 字符数组查找-----拉手笔试
  8. word20161219
  9. python if else_菜鸟笔记015 Python If ... Else
  10. 云码之家4年来的微信引流营销推广之路
  11. 手动决战3721和雅虎助手
  12. su室外渲染参数设置_【QA答疑】VRay3.4 for SketchUp2017 渲染参数设置
  13. m4a文件怎么转换成mp3?=
  14. Canvas: trying to draw too large bitmap 红米 k30 奔溃
  15. 苹果4.3该如何避免?机审人审怎么过?
  16. 数据中心安全域的设计和划分
  17. Cluster - 基本概念
  18. 酒浓码浓 - HTML5微数据/itemscope/itemtype/itemprop
  19. 混淆矩阵、ROC、AUC 学习记录
  20. uva 11800 Determine the Shape

热门文章

  1. 解决uniapp中地址授权失败
  2. Win10家庭版安装Docker Desktop后无法重启,强制重启后无法联网问题的解决
  3. Linux命令(十七) 关机命令,linux定时关机命令是什么
  4. 华为 手动配置链路聚合
  5. 在Linux上如何快速搭建MongoDB集群
  6. miui10 android 唤醒,小米再次推送MIUI10最新版,修复小爱同学唤醒功能,没理由不升级...
  7. 【死循环警告⚠】i=i++导致的死循环!
  8. Spring Boot 2.0系列文章(四):Spring Boot 2.0 源码阅读环境搭建
  9. jupiter 85 2.0
  10. 为啥要做接口测试?接口测试用例怎么写?哪些工具可以用?