双链表(一)

双链表头节点,数据节点的创建

单链表的创建会了之后,双链表也很容易就会,只是多了一个指针指向前面一个节点。

头节点的创建

#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;
    }
}

 

posted @ 2019-08-23 18:04  足迹遍地  阅读(152)  评论(0编辑  收藏  举报