链表倒序问题(双向链表的基础运用)

原创 2015年11月20日 23:54:35
#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');
}

在链表问题中,会遇到反向输出的问题,而对于反向输出,大部分人会利用辅助节点进行倒换指针然后进行输出,而如此做会使用过多的语句。

而双向链表则是在保持原链表结构不变的前提下,利用链表结构中的前向指针从尾节点向前依次输出直到头节点,

同理,顺序输出时也是如此,即利用后向指针,从头节点向后输出,

从而实现了链表的正向、反向输出,比起单向链表更加的简洁,且容易理解。

但要注意前后节点链接时需要两个指向关系从而使前向、后向通路均畅通无阻。

双链表的逆序——C程序设计

题目:创建一个双链表,然后逆置双链表。程序分析:将双链表逆置,即是将双链表中的元素逆置,依次将双链表的结点按照头插法插入到一个新建链表的首位,即可实现双链表元素的逆置代码如下:#include#inc...
  • qiao_yuzhou
  • qiao_yuzhou
  • 2011年01月27日 10:21
  • 4877

典型的几个链表操作-逆序和重排

http://dev.firnow.com/course/3_program/c++/cppjs/20081012/150161.html已知链表的头结点head,写一个函数把这个链表逆序 ( Int...
  • agwujiang
  • agwujiang
  • 2010年08月22日 00:30
  • 2514

双向链表的创建、逆序、删除

  • 2013年06月23日 21:13
  • 312KB
  • 下载

C语言实现单链表逆序与逆序输出实例

这篇文章主要介绍了C语言实现单链表逆序与逆序输出,是数据结构与算法中比较基础的重要内容,有必要加以牢固掌握,需要的朋友可以参考下 单链表的逆序输出分为两种情况,一种是只逆序输出,实际上不逆序;另一种是...
  • win_turn
  • win_turn
  • 2016年02月19日 00:24
  • 4404

正序逆序生成单链表,正序逆序输出链表(递归法和顺序栈法)

1.生成一个单链表 2.逆序输出结点的值(递归法和顺序栈法)
  • yurhzzu
  • yurhzzu
  • 2015年06月30日 16:47
  • 1226

实现基于异或的双链表

源码均在XP系统,VS2008下编译并运行数据结构,利用计算机的位异或操作,降低双向链表的存储需求。但实际中不推荐使用,主要以下原因: 2.1 常用的debug工具不支持xor的链表,使得debug...
  • jone741852963
  • jone741852963
  • 2015年09月09日 14:46
  • 986

C++算法之 倒序输出一个链表

题目:给定一个头结点,倒叙输出一个链表   解法1:先将链表反转,在遍历输出 解法2:不修改链表自身的结构,动态申请一段空间,申请一个指针数组,数组内存放的指针指向链表的每个值,再遍历数组输出:...
  • djb100316878
  • djb100316878
  • 2014年12月12日 15:12
  • 5076

逆序输出单链表的值——深深地被递归折服

要求逆序输出单链表的值,例如: 1.null 不打印 2. 1->2->3->5->null ,打印结果为 5 4 3 2 1 哈哈,遇到这个题目时,我的第一想法就是,这...
  • FFFLLLLLL
  • FFFLLLLLL
  • 2016年06月16日 17:15
  • 1037

Java 单链表的反转 以及 双向链表的实现

Java 单链表的反转 双向链表的实现
  • fuckluy
  • fuckluy
  • 2016年03月27日 09:34
  • 660

C语言-----循环双向链表(增加文件读写链表功能)

双向链表其实是单链表的改进。 当我们对单链表进行操作时,有时你要对某个结点的直接前驱进行操作时,又必须从表头开始查找。这是由单链表结点的结构所限制的。因为单链表每个结点只有一个存储直接后继结点地址的链...
  • u010193457
  • u010193457
  • 2015年11月25日 17:39
  • 1667
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:链表倒序问题(双向链表的基础运用)
举报原因:
原因补充:

(最多只允许输入30个字)