我们在单链表中,有了next指针,这就使得我们要查找下一个结点的时间复杂度为O(1),可是如果我们要查找的是上一个结点的话,那么最坏的时间复杂度为O(n)。因为我们每次都要从头开始遍历。
为了克服单向性这一缺点,双向链表就横空出示。双向链表是在单链表的每一个结点中再设置一个指向前驱结点的指针域。所以在双向链表中的所有结点都有两个指针域,一个指向直接后继,另一个指向其直接前驱。
下面分享一下我写的双向链表的综合操作。希望对大家有用。
双向链表的头插与尾插的区别:见下方图示
双向循环链表的综合操作
/*********************************************************
- Copyright (C): 2016
- File name : bothwaylink.cpp
- Author : - Zhaoxinan -
- Date : 2016年04月19日 星期二 17时12分28秒
- Description : 双向循环链表的综合操作
* *******************************************************/
#include <iostream>
#include <cstdlib>
typedef struct node
{
int num;
struct node * prior;
struct node * next;
}Node;
typedef Node * Link;
/*创建双向循环链表头节点*/
void create_link(Link *head)
{
*head = new Node;
(*head)->prior = *head;
(*head)->next = *head;
}
/*双向循环链表的头插*/
void insert_head(Link *head, Link *newnode)
{
(*newnode)