博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反转链表
阅读量:5147 次
发布时间:2019-06-13

本文共 1724 字,大约阅读时间需要 5 分钟。

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点

 

思路:

假设有链表A->B->C->D->E->F->G。在反转链表过程中的某一阶段,其链表指针指向为:A<-B<-C<-D  E->F->G。也就是说在结点D之前的所有结点都已经反转,而结点D后面的结点E开始的所有结点都没有反转。这样D跟E之间存在了断裂,所以不仅需要保存当前结点和它的前一个结点,还需要保存当前结点的下一个结点,一共需要3个指针来操作

第一个指针pre用来保存当前结点的前一个结点

第二个指针now用来指向当前结点

第三个指针用来保存当前结点的下一个指针,因为反转当前结点的指针时:now->next=pre,会丢失now->next

 

代码如下:

struct listnode{    int data;    listnode *next;};//下面所用的链表头结点都是空的//尾插法创建链表listnode *init(){    listnode *head=(listnode *)malloc(sizeof(listnode));    head->next=NULL;    listnode *p=head;    cout<<"please input a number(按-1结束)"<
>data; while(data!=-1) { listnode *temp=(listnode *)malloc(sizeof(listnode)); temp->data=data; temp->next=p->next; p->next=temp; p=temp; cout<<"please input a number(按-1结束)"<
>data; } return head;}//打印链表void print(listnode *head){ listnode *p=head->next; while(p) { cout<
data<<" "; p=p->next; } cout<
next;//当前结点 listnode *newhead=(listnode *)malloc(sizeof(listnode));//新结点的头指针 newhead->next=NULL; //只有一个结点,头结点(空) if(now==NULL) return head; listnode *pre=NULL;//当前结点的前一个结点 while(now !=NULL) { listnode *pnext=now->next; //保存当前结点的下一个结点 //如果当前结点的下一个结点为空,则构建新的头结点 if(now->next==NULL) { newhead->next=now; } //将当前结点的next指向它的前一个结点 now->next=pre; //pre和now指针都后移 pre=now; now=pnext; } return newhead;}

测试代码以及运行结果:

int main(){    listnode *head=init();    print(head);    head=reverselist(head);    print(head);    return 0;}

转载于:https://www.cnblogs.com/runninglzw/p/4530273.html

你可能感兴趣的文章
自动分割mp3等音频视频文件的脚本
查看>>
财务结算的目的和一般流程
查看>>
Myeclipse 优化1
查看>>
[BJOI2012]最多的方案(记忆化搜索)
查看>>
生成了一个严重警告并将其发送到远程终结点。这会导致连接终止。TLS 协议所定义的严重错误代码是...
查看>>
判断字符串是否为空的注意事项
查看>>
布兰诗歌
查看>>
vscode 中 eslint 相关配置
查看>>
老李分享:5个衡量软件质量的标准
查看>>
Xcode部分插件无法使用识别的问题
查看>>
set学习记录
查看>>
用函数写注册功能
查看>>
JVM笔记4:Java内存分配策略
查看>>
IE8 window.open 不支持此接口 的问题解决
查看>>
Django -- 发送HTML格式的邮件
查看>>
最近面试问题汇总
查看>>
ORM版学员管理系统3
查看>>
修改安卓虚拟机系统镜像
查看>>
windows 2003 Server平台Delphi程序不支持直接调用webservice
查看>>
电子书下载:Professional ASP.NET Design Patterns
查看>>