(Bug有点多,求指正)
//双向链表.cpp:定义控制台应用程序的入口点。
//作者Ricardo.M.Tan
#include"stdafx.h"
#include"malloc.h"
#include"string.h"
#include"stdio.h"
#include<iostream>
typedef int DataType;
typedef struct LNode{
DataType data;
struct LNode *prior;/*声明一个用于指向前一个节点的指针*/
struct LNode *next;/*声明一个用于指向后一个节点的指针*/
}LNode, *Link;
//创建链表
Link CreatList(){
Link head, tmp, p;
head = (Link)malloc(sizeof(DataType));
p = head;
int Data;
scanf_s("%d", &Data);
while (Data != 0){
tmp = (Link)malloc(sizeof(DataType));
tmp->data = Data;
p->next = tmp;
tmp->prior = p;/*在p指针前移之前完成后与前的链接,若将p=p->next;置于此句之前,则链表会断开*/
p = p->next;
scanf_s("%d", &Data);
}
//收尾,首尾互相扣接
p->next = head;
head->prior = p;
return(head);
}
//遍历链表
void output(Link H){
Link p = H;
printf("正向链表:\n");
while (p->next != H){
printf("%4d", p->next->data);
p = p->next;
}
p = H;
printf("反向链表:\n");
while (p->prior != H){
printf("%4d", p->prior->data);
p = p->prior;
}
}
//主函数入口
int main(){
Link h = CreatList();
output(h);
system("pause");/*控制闪退*/
return 0;
}