C语言指针-链表逆转
来源:互联网 发布:java设置cookie失效 编辑:程序博客网 时间:2024/05/29 04:02
昨晚看到庭波老师的日志说要实现链表逆转,点进去看了下。庭波老师的算法是把链表的数据读出来,用数组存起来,然后再逆向放到链表里。我觉得这个做法太暴力了,费内存还费时间。至少来说,建立一个数组(要都是链表不小的话)就耗掉好多内存,把数据倒腾来倒腾去,也会费掉好多时间。
出于ACMer的直觉,我提出可以直接用指针实现,更加体现C语言指针的特性,也能省掉内存和时间。庭波老师可能最近讲了数组吧,一直掐着数组不放,说要建一个指针数组,然后给每个链表节点一个指针,然后再通过修改p->next来实现逆转。
其实我说的用指针实现链表逆转指针,是用三个指针,然后就可以实现逆转了。。。。。。。
庭波老师的算法:
我的算法:
我的代码实现:
<span style="font-size:18px;">#include<stdio.h>#include<stdlib.h>using namespace std;struct node{//链表节点 int data; struct node *next;}*head,*p1,*p2,*p3;//链表的头指针、其他指针void new_node(){//新建链表,内容由输入确定,输入整形数据 用空格格开,输入“句号”结束输入 int n,i; int a[]={1,2,3,4,5,6,7,8,9};//直接用数组实验,省去输入时间 p1=(node *)malloc(sizeof(node)); head=p1; // while(scanf("%d",&n)&&n!='.'){ for(i=0;i<9;i++){// n=a[i];// p2=(node *)malloc(sizeof(node)); p1->next=p2; p2->data=n; p2->next=NULL; p1=p2; }}void disp_node(){//显示链表内容 p1=head; while(p1->next) printf("%d ",p1->next->data),p1=p1->next; printf("\n");}void reverse_node(){//逆转链表 p1=head; p2=p1->next; p3=p2->next; while(p3->next){ p1=p2; p2=p3; p3=p3->next; p2->next=p1; } p3->next=p2; head->next->next=NULL; head->next=p3;}int main(){ new_node();//新建一个链表 disp_node();//输出原链表 reverse_node();//逆转链表 disp_node();//再次输出链表,显示逆转后的链表 return 0;}</span>
0 0
- C语言指针-链表逆转
- 逆转字符串 C语言
- 单链表的逆转 C语言
- 【C语言】逆转一个数字
- C语言:字符串的逆转
- C语言逆转字符串数组
- c实现逆转单向循环链表
- C/C++练手-逆转链表
- c语言指针链表
- c语言编程题之字符串逆转。
- C语言非递归实现字符串逆转
- c语言实现比特位的逆转
- 逆转链表
- 单向链表逆转
- 链表的逆转
- 逆转单向链表
- 关于逆转链表
- 实现链表逆转
- malloc和new区别
- CentOS 6.5系统中安装配置MySQL数据库
- duilib消息处理
- 博客园与CSDN博客搬家
- 第5章、解析Hello,world!知其然,更要知其所以然(从零开始学Android)
- C语言指针-链表逆转
- 安卓App常见的代码架构分析
- myisam与innodb各自的特点
- case when分栏,不同情况查询不同的表
- 第6章、编辑框EditText与按钮Button(从零开始学Android)
- 霜降后,最忆拐枣情
- 第7章、单选按钮RadioGroup与复选框CheckBox(从零开始学Android)
- <img/>标签onerror事件会弹出“Stack overflow at line: 0”
- Android流量统计TrafficStats类的使用