链表倒序问题(双向链表的基础运用)
来源:互联网 发布:益盟资金博弈指标源码 编辑:程序博客网 时间:2024/06/16 05:48
#include <stdio.h>#include <stdlib.h>struct node{ int key; struct node *next,*before;//结构中包含前向指针before,后向指针next};typedef struct node n;void main(){ int a; n *head,*en,*p,*q,*p3,*p4; head=(n*)malloc(sizeof(struct node));//头节点 en=(n*)malloc(sizeof(struct node));//尾节点 head->next=en; en->before=head; head->before=NULL; en->next=NULL; p=(n*)malloc(sizeof(struct node)); head->next=p; p->before=head; en->before=p; p->next=en; while(1) { scanf("%d",&a); if(a) { p->key=a; p->next=q=(n*)malloc(sizeof(struct node)); q->before=p; p=q; } else { p->before->next=en;//需要注意此处与en连接的节点并不是最终的p,而是它的前一个节点 en->before=p->before; break; } } p3=head->next;//正序输出:从头节点开始输出 while(p3->next!=NULL) { printf("%d ",p3->key); p3=p3->next; } putchar('\n'); p4=en->before;//翻转输出:从尾节点开始输出 while(p4->before!=NULL) { printf("%d ",p4->key); p4=p4->before; } putchar('\n');}
在链表问题中,会遇到反向输出的问题,而对于反向输出,大部分人会利用辅助节点进行倒换指针然后进行输出,而如此做会使用过多的语句。
而双向链表则是在保持原链表结构不变的前提下,利用链表结构中的前向指针从尾节点向前依次输出直到头节点,
同理,顺序输出时也是如此,即利用后向指针,从头节点向后输出,
从而实现了链表的正向、反向输出,比起单向链表更加的简洁,且容易理解。
但要注意前后节点链接时需要两个指向关系从而使前向、后向通路均畅通无阻。
0 0
- 链表倒序问题(双向链表的基础运用)
- 链表的倒序
- 链表的倒序算法
- 链表的倒序输出
- 链表的倒序输出
- 链表的倒序打印
- 链表的倒序遍历
- 基础数据结构--双向链表的实现
- 单向链表倒序
- 链表倒序算法
- C链表倒序
- 链表倒序算法
- 链表倒序
- 链表倒序
- 倒序输出链表
- 倒序输出链表
- 关于链表倒序
- 倒序输出链表
- 《coredump问题原理探究》Linux x86版7.10节set相关的iterator对象
- socket阻塞与非阻塞
- 1. Spring Boot 1.2.5正式发布
- 【bzoj2733】 [HNOI2012] 永无乡
- MongoDB——主从复制
- 链表倒序问题(双向链表的基础运用)
- Android基本知识(二)
- 【bzoj1878】[SDOI2009]HH的项链
- yii执行流程
- 2. Spring Boot 1.2.5 不允许加载iframe问题解决
- 黑马程序员-面向对象
- KVC和KVO
- ubuntu12.04搭建gitlab
- 隐藏导航条底部的横线