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

原创 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');
}

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

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

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

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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

数据结构基础之双向链表(约瑟夫问题)

约瑟夫问题。有n个小朋友,编号分别为1,2....n,按编号围成一个圈,他们按顺时针方向从编号为K的人由1开始报数,报数为m的人出列 他的下一个人重新从1开始报数,数到m的人出列,照这样重复下去,直到...

异或指针双向链表

  • 2016-12-16 19:09
  • 14KB
  • 下载

Linux双向链表(三)——基础操作拓展拆分与捻接

双向链表高级操作 在第一篇博文当中讨论的链表操作,是基础的增,删,改!而在本博文当中,将要在前文的基础操作上,封装高级的链表操作API,废话少说,开干!(+)_(+) 1、左向移动结点 static ...

双向链表实现

双向链表的操作

数据结构基础(1)-->双向链表

linklist.h#ifndef LINK_LIST_H #define LINK_LIST_H 1 #include #include #include struct stu { ch...

双向链表代码

双向链表基础操作C++实现

Node.h:template struct Node { T val; Node* next; Node* prev; Node(T nVal) { ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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