NOTICE: 本题代码是按照源码顺序贴上的,复制可直接运行
环境: Visual Stdio Code
题目
已知有一个单向循环链表,其每一个节点中含有三个域:prior,data 和 next,其中 data 为数据域,next 为指向后继节点的指针域,prior 为指针域,但它的值为空(NULL),试编此单向循环链表改为双向循环链表,即使 prior 成为指向前驱节点的指针域。
分析
初始化的时候就得确定该链表是循环链表;
可以验证是否为循环链表:打印出最右边节点的直接后继节点。
代码
初始化:
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int Status;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
LNode *prior; // 指向直接前驱节点
LNode *next; // 指向直接后继节点
}LNode, *LinkList;
Status InitList(LinkList &L)
{ // 初始化双向循环链表
L = (LinkList)malloc(sizeof(LNode));
if(!L) return OVERFLOW;
L->prior = L->next = L;
return OK;
}//InitList
链表长度: