逆向打印双链表

lixiangrong
2024-01-29 / 0 评论 / 36 阅读 / 正在检测是否收录...

从右往左打印双链表

#include <stdio.h>
#include <stdlib.h>

typedef int dataType;

// 3.5 双链表
typedef struct dLinkNode
{
    dataType data;
    struct dLinkNode *lLink,*rLink;
}dNode,*dLinkList;

// 1.初始化不带头结点的双链表
void init(dLinkList *head)
{
    *head = NULL;
}

// 2.输出双链表各结点的值
void display(dLinkList head)
{
    dNode *p = head;
    if(!p)
    {
        printf("双链表为空!\n");
        return;
    }
    do{
        printf("%d ",p->data);
        p = p->rLink;
    } while (p);
    printf("\n");
}

// 4.在双链表尾部插入值为x的结点
void rearInsert(dLinkList *head, dataType x)
{
    dNode *p = *head,*q;
    q = (dNode*) malloc(sizeof(dNode));
    q->data = x;
    q->rLink = NULL;
    if(!p) // 链表为空时
    {
        *head = q;
        q->lLink = NULL;
    } else
    {
        while (p->rLink) // 找到双链表的尾结点
            p = p->rLink;
        p->rLink = q;
        q->lLink = p;
    }
}

// 3.8.10 从右往左打印双链表
void recursivePrint(dLinkList list)
{
    if(!list) // 当双链表为空时防止出错
    {
        printf("双链表为空!");
        return;
    }
    if(list->rLink)
        recursivePrint(list->rLink);
    printf("%d ",list->data);
}

int main()
{
    dLinkList list; // 声明指向双链表的头指针
    init(&list); // 初始化双链表
    for (int i = 1; i <= 5; i++)
        rearInsert(&list,i); // 插入结点
    display(list); // 输出双链表
    recursivePrint(list);
    return 0;
}
0

评论 (0)

取消