从右往左打印双链表
#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)