双向链表大型攻略
我们之前已经做了链表的大型攻略。包括如何创建一个链表,插入节点,打印数据,删除节点等常用的功能。我们通常将这种每个节点有一个数据段和一个指向下个节点指针的链表为 单向链表 。我想通过某一个节点能找到下一个节点,但是如果我想通过该节点找到上一个节点呢?这几乎是不可能的。除非我将单向链表首尾相连构成环形的单向循环链表,走一个循环之后就可以找到其上一个节点的数据了,但是这有过于麻烦,为了解决这种问题,我们引入了 双向链表 ,也就是说在一个节点上不仅有指向下一个节点的指针,还有另外一个指针指向上一个节点。 没错,每一个节点就长这个样子,有两个指针,当然了我们给他们不容的名字,并将他们分别指向上一个和下一个节点: 当然了也需要有一个头指针和头节点 其实双向链表和单向链表的区别仅仅就是每个节点多了一个指向上个节点的指针,所以我们在操作时要多做一个指向的步骤。 我们首先 创建一个节点 ,要记得是2个指针 typedef struct Node { int data; struct Node *prev; struct Node *next; }node; 用刚才的结构体写一个函数, 新建节点 ,和之前的单向链表别无二致 /************************* *函数功能:新建节点 *输入参数:节点所存数据 *返 回 值:节点指针 **************************