单链表的逆置

这篇具有很好参考价值的文章主要介绍了单链表的逆置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 问题

如何实现单链表中的数据进行逆置。

2 方法

  1. 方法一头插法:利用头插法重新建立带节点的新链表,逆置链表初始为空,表中节点从原链表中依此“删除”,在逐个插入逆置链表的表头(即“头插”到逆置链表中),使它成为逆置链表的“新”的第一个节点,如此循环,直至原链表为空;
  2. 方法二递归:先假定有一个函数,可以将以head为头结点的单链表逆序,并返回新的头结点。利用这个函数对问题进行求解:将链表分为当前表头结点和其余部分,递归的过程就是,先将表头结点从链表中拆出来,然后对其余部分进行逆序,最后将当前的表头结点链接到逆序链表的尾部。递归的终止条件就是链表只剩一个节点时,直接返回这个节点。

代码清单 1

#方法一
#include <stdio.h>
#include <stdlib.h>
typedef struct List{
int data;
struct List* next;
}LIST;
//表的初始化,不带头节点,
LIST* CreatSlist()
{
LIST* head=NULL;
for(int i=5;i>=1;i--)
{
LIST* newhead=(LIST *)malloc(sizeof(LIST));
newhead->data=i;
newhead->next=head;
head=newhead;
}
return head;
}
//打印输出
void print(LIST* P)
{
while(P!=NULL)
{
printf("%d ",P->data);
P=P->next;
}
printf("\n");
return;
}
//单链表反转(头插法)
LIST* reverse(LIST* head)
{
LIST *temp=NULL,*Phead=NULL;
while(head!=NULL)
{
temp=head;
head=head->next;
temp->next=Phead;
Phead=temp;
}
return Phead;
}
int main ()
{
printf("原来的链表的数据:\n");
LIST* P=CreatSlist();
print(P);
printf("反转后链表的数据:\n");
LIST* head=reverse(P);
print(head);
return 0;
} #方法二
#include <stdio.h>
#include <stdlib.h>
typedef struct List{
int data;
struct List* next;
}LIST;
//表的初始化,不带头节点,
LIST* CreatSlist()
{
LIST* head=NULL;
for(int i=5;i>=1;i--)
{
LIST* newhead=(LIST *)malloc(sizeof(LIST));
newhead->data=i;
newhead->next=head;
head=newhead;
}
return head;
}
//打印输出
void print(LIST* P)
{
while(P!=NULL)
{
printf("%d ",P->data);
P=P->next;
}
printf("\n");
return;
}
//单链表反转(递归法)
LIST* reverse(LIST* head)
{
if(head==NULL||head->next==NULL)
return head;
LIST *new_head=reverse(head->next);
head->next->next=head;
head->next=NULL;
return new_head;
}
int main ()
{
printf("原来的链表的数据:\n");
LIST* P=CreatSlist();
print(P);
printf("反转后链表的数据:\n");
LIST* head=reverse(P);
print(head);
return 0;
}

3 结语

针对如何实现单链表的逆置,提出利用头插法和递归法进行处理,通过利用IDLE编写,证明该方法是有效的,通过本次实验加深单链表基本处理操作,为更深入的有关单链表的操作积累了经验,有助于提升对单链表的操作能力。文章来源地址https://www.toymoban.com/news/detail-553934.html

到了这里,关于单链表的逆置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构(C语言):将单链表就地逆置

    设计一个算法,实现将头结点为head的单链表就地逆置 ,即利用原带头结点单链表head的结点空间将数据元素序列(a0,a1,…,an-1)逆置为(an-1,…, a1,a0)。 本题所使用的数据结构定义如下: 单链表的数据结构定义: 1 、若单链表为空表或单链表中只有一个元素,则无需进行逆置

    2024年02月08日
    浏览(27)
  • 数据结构——单链表的查找、求单链表长度、单链表的创建

    一、单链表的查找 1.按位查找 ==GetElem(L, i): == 按位查找操作,获取表 L 中第 i 个位置的元素的值 ;   平均时间复杂度O(n) 2.按值查找 ==LocateElem(L, e)==: 按值查找操作,在表 L 中查找具有给定值的元素 ; 二、求单链表的长度 == Length(LinkList L)== :计算单链表中数据结点(

    2024年01月21日
    浏览(43)
  • 【C++】单链表——单链表的基本操作

     由于顺序表的插入删除操作需要移动大量的元素,影响了运行效率,因此引入了线性表的链式存储—— 单链表 。单链表通过一组任意的存储单元来存储线性表中的数据元素,不需要使用地址连续的存储单元,因此它不要求在逻辑上相邻的两个元素在物理位置上也相邻。 单

    2024年02月03日
    浏览(36)
  • 单链表的体会

    单链表是一种十分常用的数据结构,可以用来解决很多实际问题。通过学习和实现单链表,可以加深对数据结构和算法的理解,并提高编程能力。 代码实现了单链表的初始化、节点的插入、删除和打印等基本操作。 单链表是一种常见的数据结构,由节点组成,每个节点包含

    2024年02月08日
    浏览(24)
  • 单链表的基本操作

    目录 一.链表的基本概念和结构 二.链表的分类 三.单链表的基本操作  1.创建一个节点 2.打印 3.尾插 4.头插 5.尾删 6.头删 7.查找 8.指定位置插入 9.指定位置删除 10.销毁         概念:链表是一种 物理存储结构上非连续 、非顺序的存储结构,数据元素的 逻辑顺序 是通过链表

    2024年01月22日
    浏览(36)
  • 单链表的插入与删除

    链表是数据结构中的一种线性结构,表示数据运算之间的一种抽象关系。 1、单链表的结构如下:         其中包括一个数据域和一个指针域,向单链表中插入成员时只需要再次分配一个同样的变量,让上一个变量中的指针域指向下一个节点即可,比起顺序表来说,链表更加

    2024年02月15日
    浏览(30)
  • 【(数据结构)— 单链表的实现】

    概念: 链表是⼀种 物理存储结构上非连续、 非顺序的存储结构,数据元素的 逻辑顺序 是通过链表中的 指针链接 次序实现的 。 链表的结构跟⽕⻋⻋厢相似,淡季时⻋次的⻋厢会相应减少,旺季时⻋次的⻋厢会额外增加⼏节。只需要将⽕⻋⾥的某节⻋厢去掉/加上,不会影响

    2024年02月08日
    浏览(33)
  • 【数据结构】单链表的实现

    🌇个人主页:平凡的小苏 📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情 🛸C语言专栏:https://blog.csdn.net/vhhhbb/category_12174730.html 🚀数据结构专栏:https://blog.csdn.net/vhhhbb/category_12211053.html         家人们更新不易,你们的👍点赞👍和⭐关注⭐真的对我

    2023年04月09日
    浏览(37)
  • 【数据结构—单链表的实现】

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 1. 链表的概念及结构 2. 单链表的实现 2.1单链表头文件——功能函数的定义 2.2单链表源文件——功能函数的实现 2.3 单链表源文件——功能的测试 3.具体的理解操作图 4. 链表的分类 总结 世上

    2024年02月05日
    浏览(44)
  • 数据结构--单链表的定义

    单链表的定义(如何用代码实现) 优点:不要求大片连续空间,改变容量方便 缺点:不可随机存取,要耗费一定空间存放指针 为了方便 我们经常使用 typedef t y p e d e f 数据类型 别名 color{purple}typedef 数据类型 别名 t y p e d e f 数据类型 别名 代码一: 代码二: 代码一与代码二是

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包