对于双向循环链表的创建可从下图理解:
由上图可清晰的知道双向循环链表的结构,即对于一个newNode插入链表是首先应该将newNode的prev指向current,即newNode->prev=current;再将newNode的next指向current的next;
即newNode->next=current->next;再将current的之前的下一个元素即15所指代的结构体指向newNode即current->next-》prev=newNode; 最后再将current的next指向newNode;current->next=newNode;
双向
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
typedef int elemType;
typedef struct node
{
elemType number;
struct node *prev, *next;
}lnode,*listNode;
void initNode(listNode & head)
{
head = (listNode)malloc(sizeof(lnode));
head->number = 0;
head->next = head->prev = head;
}
void createList(listNode &head)
{
listNode pNode,temp;
pNode = (listNode)malloc(sizeof(lnode));
// scanf("%d", pNode->number);
pNode = head;
temp = (listNode)malloc(sizeof(lnode));
scanf("%d",&temp->number);
while (temp->number != -1)
{
if (head->next == head)
{
temp->next = head;
pNode->next = temp;
head->prev = temp;
temp->prev = pNode;
}
else
{
temp->next = pNode->next;
temp->prev = pNode;
pNode->next->prev = temp;
pNode->next = temp;
}
pNode = temp;
temp = (listNode)malloc(sizeof(lnode));
scanf("%d", &temp->number);
}
}
int topInsertList(listNode &head,listNode &tNode)
{
if (head ->next==head)
{
tNode->next = head;
tNode->prev = head;
head->next = tNode;
head->prev = tNode;
}
else
{
tNode->next = head->next;
tNode->prev = head;
head->next = tNode;
head->next->prev = tNode;
}
return 0;
}
void tailInsertList(listNode & head,listNode tNode)
{
listNode node;
node = head;
while (node->next!=head)
{
node=node->next;
}
if (node->next == head)
{
head->prev->next = tNode;
head->prev = tNode;
tNode->prev = head->prev;
tNode->next = head;
}
}
void printList(listNode head)
{
if (head == NULL)
{
exit(2);
}
listNode node;
node = head;
while (node->next != head)
{
printf("%d ",node->number);
node = node->next;
}
printf("%d", node->number);
printf("\n");
}
int main()
{
listNode tphead,newNode,newNode1;
initNode(tphead);
createList(tphead);
printList(tphead);
initNode(newNode);
newNode->number = 99;
topInsertList(tphead,newNode);
printList(tphead);
initNode(newNode1);
newNode1->number = 111;
tailInsertList(tphead,newNode1);
printList(tphead);
system("pause");
return 0;
}