双向循环链表问题

来源:百度知道 编辑:UC知道 时间:2024/06/21 18:26:51
#include <stdio.h>
#include <stdlib.h>
typedef struct tagDbNode
{
int num;
struct tagDbNode * pre;
struct tagDbNode * next;
} DbNode, * pdbNode;
//创建结点
pdbNode CreateNode(int num)
{
pdbNode pnode = (pdbNode)malloc(sizeof(DbNode));
pnode->num = num;
pnode->pre = pnode->next = pnode; //创建新结点时,让其前驱和后继指针都指向自身
return pnode;
}
//创建链表
pdbNode CreateList(int head) //参数给出表头结点数据 (表头结点不作为存放有意义数据的结点)
{
pdbNode pnode = (pdbNode)malloc(sizeof(DbNode));
pnode->num = head;
pnode->pre = pnode->next = pnode;
return pnode;
}
//获取链表的长度
int GetLength(pdbNode node) // 参数为链表的表头结点
{
}
//插入新结点,顺序插入
pdbNode InsertNode(pdbNode node,int num) // 参数1是链表的表头结点,参数2是要插入的结点(结点数据为num)
{
}
//打印整个链表
void PrintList(pdbNode node) // 参数为链表的表头结点
{
pdbNode pnode;
if (NULL == node) retur

//获取链表的长度,不包括头结点
int GetLength(pdbNode node) // 参数为链表的表头结点
{
if ( node == NULL ) return -1;

pdbNode pCurrent = node;
int count = 0;
while ( pCurrent->next != node )
{
count ++;
pCurrent = pCurrent->next;
}
return count;
}
//插入新结点,顺序插入
//意思是不是插入时候自动按照大小插入到合适位置?
pdbNode InsertNode(pdbNode node,int num) // 参数1是链表的表头结点,参数2是要插入的结点(结点数据为num)
{
if ( node == NULL ) return NULL;

pdbNode pCurrent = node->next;
//若pCurrent回到头结点就停止
while ( pCurrent != node && pCurrent->num > num )
pCurrent = pCurrent->next;
// 结点插在pCurrent之前,也就是比num小的数字之前,或者链表尾之前
pdbNode pNewNode = CreateNode( num );
pNewNode->next = pCurrent;
pNewNode->pre = pCurrent->pre;
pCurrent->pre->next = pNewNode;
pCurrent->pre = pNewNode;
return node;
}