1. 问题描述:使用头插法创建双链表
2. 与单链表不同的是,双链表的结构体中多了一个变量就是指向当前节点的前驱节点,这样我们在循环遍历的时候可以通过当前节点的前驱指针找到前驱节点,在创建双链表的时候比单链表多了一个步骤就是对于前驱指针的操作,下面是使用C语言的头插法实现的双链表,具体的代码如下:
#include<iostream>
#include<malloc.h>
using namespace std;
//双链表
typedef struct node{
int data;
node *prior;
node *next;
}DLnode;
DLnode *L;
DLnode* createCoubleList(DLnode *L, int arr[], int n){
DLnode *p, *q;
int i;
L = (DLnode*)malloc(sizeof(DLnode));
L->prior = NULL;
L->next = NULL;
q = L;
for(i = 0; i < n; ++i){
p = (DLnode*)malloc(sizeof(DLnode));
p->data = arr[i];
p->prior = NULL;
p->next = NULL;
q->next = p;
p->prior = q;
q = p;
}
return L;
}
int main(void){
int arr[] = {12, 34, 56, 78, 100, 43, 2};
DLnode *p = createCoubleList(L, arr, 7);
while(p->next != NULL){
cout << p->next->data << " ";
p = p->next;
}
return 0;
}