前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单链表的逆置

单链表的逆置

作者头像
算法与编程之美
发布2023-08-22 14:29:04
2310
发布2023-08-22 14:29:04
举报
文章被收录于专栏:算法与编程之美

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编写,证明该方法是有效的,通过本次实验加深单链表基本处理操作,为更深入的有关单链表的操作积累了经验,有助于提升对单链表的操作能力。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档