我们先来实现带头单链表的基本操作:

头文件:

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode{ElemType data;struct LNode*next;
}LT,*link;
void InitList(Link phead);//初始化
void InsertListfront(Link phead,ElemType x);//头插
void InsertListback(Link phead,ElemType x);//尾插
void InsertList(Link phead,ElemType x);//随机插入
void DeleteListfront(Link phead);//头删
void DeleteListback(Link phead);//尾删
void DeleteList(Link phead,ElemType x);//随机删除
void ReverseList(Link phead);//倒置
void PrintList(Link phead);//打印

声明函数的源文件:

#include"test.h"
void InitList(Link phead){if(phead==NULL)return ;phead->next=NULL;
}
void InsertListfront(Link phead,ElemType x){LT*newnode=(LT*)malloc(sizeof(LT));if(newnode==NULL)exit(-1);else{newnode->data=x;newnode->next=phead->next;phead->next=newnode;}
}
void InsertListback(Link phead,ElemType x){LT*newnode=(LT*)malloc(sizeof(LT));if(newnode==NULL)exit(-1);else{newnode->data=x;newnode->next=NULL;LT*tail=phead;while(tail->next){tail=tail->next;}tail->next=newnode;}
}
void InsertList(Link phead,int pos,ElemType x){LT*newnode=(LT*)malloc(sizeof(LT));LT*P=phead->next;if(newnode=NULL)exit(-1);else{newnode->data=x;for(int i=0;i<pos;i++)p=p->next;newnode->next=p->next;p->next=newnode;}
}
void DeleteListfront(Link phead,ElemType x){if(phead->next==NULL){printf("无元素删除\n");exit(-1);}else{LT*cur=phead->next;phead->next=cur->next;free(cur);cur=NULL;}
}
void DeleteListback(Link phead,ElemType x){if(phead->next==NULL){printf("无元素可删除\n");exit(-1);}else{LT*head=phead;LT*tail=phead->next;while(tail){head=head->next;tail=tail->next;}head->next=NULL;free(tail);tail=NULL;}
}
void DeleteList(Link phead,ElemType x){LT*head=phead;LT*cur=NULL;while(head->next){if(head->next->data==x){cur=head->next;head->next=cur->next;free(cur);cur=NULL;}elsehead=head->next;}
}

反转链表就是倒置链表,有两个思路,第一个思路是将箭头指向相反的方向,第二个思路就是头插法。而每个思路的带头结点和不带头结点的操作也不同,下面我们来一一实现。

思路一:(带头结点的单链表)

void ReverseList(Linklist L){ListNode*pre,*p=L->next,*r=p->next;p->next=NULL;while(r!=NULL){pre=p;p=r;r=r->next;p->next=pre;}L->next=p;//处理最后一个结点
}

思路二:头插法

void ReverseList(Link phead){ListNode*p,*r;p=phead->next;phead->next=NULL;while(p!=NULL){r=p->next;p->next=phead->next;phead->next=p;p=r;}
}

数据结构————倒置带头结点单链表操作讲解相关推荐

  1. 单链表操作实现getelem_c语言实现--带头结点单链表操作

    可能是顺序表研究的细致了一点,单链表操作一下子就实现了.这里先实现带头结点的单链表操作. 大概有以下知识点. 1;结点:结点就是单链表中研究的数据元素,结点中存储数据的部分称为数据域,存储直接后继地址 ...

  2. 数据结构之不带头结点单链表和带头结点单链表相关操作实现(C语言)

    文章目录 单链表定义 不带头结点单链表 带头结点单链表 头结点和头指针的区分 带头结点单链表优点 单链表定义 线性表的链式存储又称单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素. 不带头 ...

  3. 算法与数据结构之带头结点和不带头结点单链表存在的问题

    带头结点和不带头结点单链表注意的小细节 在写不带头结点的单链表中发现了一个问题,这个问题在带头结点的单链表中也存在,那就是值传递的问题. 首先来看一下 #include<stdio.h> ...

  4. #数据结构:编写不带头结点单链表的建立、插入和删除算法

    编写不带头结点单链表的建立.插入和删除操作算法. 一.问题描述 编写一个不带头节点的单链表 二.基本要求 1) 建立 2) 插入 3) 删除 三.算法思想 选用不带头结点的单链表,在第一个元素节点前插 ...

  5. 【1138】数据结构上机测试2-1:单链表操作A(顺序建表+删除节点)(SDUT)

    数据结构上机测试2-1:单链表操作A Time Limit: 1000ms   Memory limit: 4096K  有疑问?点这里^_^ 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头 ...

  6. java带头结点的单链表_自己实现集合框架 (五): 带头结点单链表的实现

    这是系列文章,每篇文章末尾均附有源代码地址.目的是通过模拟集合框架的简单实现,从而对常用的数据结构和java集合有个大概的了解.当然实现没有java集合的实现那么复杂,功能也没有那么强大,但是可以通过 ...

  7. java带头节点的单链表_自己实现集合框架(五):带头结点单链表的实现

    这是系列文章,每篇文章末尾均附有源代码地址.目的是通过模拟集合框架的简单实现,从而对常用的数据结构和java集合有个大概的了解.当然实现没有java集合的实现那么复杂,功能也没有那么强大,但是可以通过 ...

  8. 带头结点单链表递增有序

    怎么说呢,思路很简单很简单,先把头结点拆出来,后边的结点继续遍历,向头结点中插入,只不过插入的时候有了一点条件而已(需要有序),但是!!感觉一点也不简单呢,指针一直变,还是有点混乱的. 慢慢熟悉一下加 ...

  9. 小白算法积累——单链表13#带头结点单链表+就地归并+改序

    题目:假设有两个按元素值递增次序排列的线性表,均以单链表的形式存储.请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表. 关键字:带头结点 ...

最新文章

  1. 面试官: Redis 与 MySQL 双写一致性如何保证?
  2. python_装饰器
  3. 数据库连接失败报错com.mysql.cj.jdbc.exceptions.CommunicationsException
  4. VC++ 在两个程序中 传递字符串等常量值的方法:使用了 WM_COPYDATA 消息的
  5. 抽取CNN网络任意层的特征,VGG模型fine-tuning实践
  6. 《MFC游戏开发》笔记三 游戏贴图与透明特效的实现
  7. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明),签到题HIL
  8. h5聊天工具的开发过程及思路
  9. 产品经理日常工作之PRD文档
  10. Excel直接将选区转为图片,并另存为文件的操作
  11. 硬盘的结构和介绍,硬盘MBR详细介绍(超详细彩图)
  12. 安卓应用市场互相抓取app包
  13. 山东理工ACM【1147】求绝对值最大值
  14. 线上教学是计算机在什么方面的应用,浅谈线上线下混合式教学模式在计算机基础教学中应用...
  15. 七、ref引用与数组的常用方法
  16. 【毕设】通过RGB识别红外图像火点(matlab)
  17. 对平稳马尔可夫链(stationary distribution of a Markov chain)的学习
  18. Christian band介绍
  19. [附源码]Python计算机毕业设计SSM基于框架的报修系统(程序+LW)
  20. 解决opensslErrorStack: [ ‘error:03000086:digital envelope routines::initialization error‘ ]的问题

热门文章

  1. 程序员最终的归宿:跑滴滴、送外卖?
  2. ubuntu安装拼音输入法 sougou拼音 google拼音
  3. 谣言检测文献阅读六—Tracing Fake-News Footprints: Characterizing Social Media Messages by How They Propagate
  4. 老友记第一季自学笔记10
  5. 自定义View(英雄联盟七星图)
  6. 切片器可以设置日期格式?_Excel中如何使用切片器,这个太高大上了
  7. 服务器accept队列溢出及其解决
  8. winform设置Sunny 主题按钮等控件文字图标
  9. electron 使用npm install安装 报错 electron@12.2.2 postinstall: node install.js
  10. 百度地图三维盒子模型标注