双链表头节点,数据节点的创建
单链表的创建会了之后,双链表也很容易就会,只是多了一个指针指向前面一个节点。
头节点的创建
#include<iostream> using namespace std; struct node { int a; struct node *next; //指向下一个节点的指针 struct node *pre; //指向上一个节点的指针 }; int main() { node *head; //指向头节点的指针 node *p; p = new node; //这里用new代替malloc,都可以用来分配内存空间 p->next = NULL; //还没有数据节点,因此全为NULL p->pre = NULL; head = p; return(0); }
创建数据节点有两种方法,一种是每次都在头节点后面创建,另一种就是每次在前一个数据节点后面创建
先看第一种
void node_creat(node *head, int n) { node *p; int i; for (i = 1; i <= n; i++) { p = new node; cin >> p->a; p->next = head->next; head->next = p; if (p->next != NULL) //这里需要判断头节点后面是否有数据节点 p->next->pre = p;//如果有就让它的pre指针指向新插入的节点 p->pre = head;//新插入的节点的pre指向头节点 } } //既然是插入新节点的时候是判断头节点后面是否有新的数据节点 //那么为什么是p->next!=NULL而不是head->next!=NULL //因为前面head->next已经赋值给p->next
第二种
void node_creat(node *head, int n) { node *p; node *q; //q用来指向每次创建好的数据节点 q = head; int i; for (i = 1; i <= n; i++) { p = new node; cin >> p->a; p->next = q->next; q->next = p; p->pre = q; q = q->next; } }