- #include<stdio.h>
- #include<malloc.h>
- #include<stdlib.h>
- #include<string.h>
- /**
- * 双向链表实现
- **/
- //定义双向链表节点
- typedef struct Node
- {
- int data;//数据域
- struct Node * pNext;//指向下一个节点的指针域
- struct Node * pre;//指向上一个节点的指针域
- }NODE,*PNODE;
- //创建双向链表
- PNODE create(void)
- {
- int len,val,i = 0;//链表长度、数据临时变量,自变量
- PNODE pHead = (PNODE)malloc(sizeof(NODE)); //定义第一个节点的头指针
- memset(pHead,0,sizeof(Node));
- if(NULL == pHead)
- {
- printf("内存申请失败!程序终止! \\n");
- exit(-1);
- }
- PNODE temp = pHead;
- temp->pNext = NULL;
- temp->pre = NULL;
- printf("请输入你要创建的双向链表的长度:\\n len = ");
- scanf("%d",&len);
- while(len > i)
- {
- PNODE pNew = (PNODE)malloc(sizeof(NODE));
- memset(pNew,0,sizeof(Node));
- if(NULL == pNew)
- {
- printf("内存申请失败!程序终止! \\n");
- exit(-1);
- }
- printf("请输入链表第%d个节点的值:\\n",i+1);
- scanf("%d",&val);
- pNew->data = val;
- pNew->pre=temp;
- temp->pNext = pNew;
- pNew->pNext = NULL;
- temp = pNew;
- i++;
- }
- return pHead;
- }
- void traverse(PNODE pHead) //循环
- {
- struct Node * p = pHead->pNext;
- while(NULL !=p)
- {
- printf("%d 的上一个节点是 %d,下一个是%d \\n",p->data,p->pre->data,p->pNext?p->pNext->data:0);
- p = p->pNext;
- }
- printf("\\n");
- }
- int main(void)
- {
- PNODE pHead = create(); //创建一个非循环的单链表
- traverse(pHead);//输出链表
- return 0;
- }
- //该片段来自于http://www.codesnippet.cn/detail/220420149344.html
来源: http://www.codesnippet.cn/detail/220420149344.html