#include <stdio.h>
#include <stdlib.h>
//节点结构
typedef struct line{
struct line *prior;
int data;
struct line *next;
}line;
//双链表的创建函数
line* initLine(line *head)
{
//创建一个首元节点,链表的头指针为 head
head=(line *)malloc(sizeof(line));
//对节点进行初始化
head->prior=NULL;
head->next=NULL;
head->data=1;
//声明一个指向首元节点的指针,方便后期向链表中添加新创建的节点
line *list=head;
for(int i=2;i<=5;i++)
{
//创建新的节点并初始化
line* body=(line*)malloc(sizeof(line));
body->prior=NULL;
body->next=NULL;
body->data=i;
//新节点与链表最后一个节点建立关系
list->next=body;
body->prior=list;
//list 永远指向链表中最后一个节点
list=list->next;
}
//返回新创建的链表
return head;
}
void display(line *head)
{
line *temp=head;
while(temp)
{
//如果该节点无后继节点,说明此节点是链表的最后一个节点
if(temp->next==NULL)
{
printf("%d\n",temp->data);
}
else
{
printf("%d <-> ",temp->data);
}
temp=temp->next;
}
}
int main()
{
//创建一个头指针
line *head=NULL;
//调用链表创建函数
head=initLine(head);
//输出创建好的链表
display(head);
//显示双链表的优点
printf("链表中第 4 个节点的直接前驱是:%d",head->next->next->next->prior->data);
return 0;
}
root@book-virtual-machine:/mnt/hgfs/lua/C++# gcc salman_0119.cpp -o salman_0119
root@book-virtual-machine:/mnt/hgfs/lua/C++# ./salman_0119
1 <-> 2 <-> 3 <-> 4 <-> 5
链表中第 4 个节点的直接前驱是:3root@book-virtual-machine:/mnt/hgfs/lua/C++#