单循环链表改成双向循环链表

2025-04-18 09:30:13
推荐回答(3个)
回答1:

#include

#include

#include

#include

using namespace std;

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

#define NULL 0

typedef int Status;

typedef int ElemType;

int n,i,j;

typedef struct node {

ElemType data; 

node *prior,*next; 

}*DLinkList; 

node *p,*q;

DLinkList head;

void CreateList(int n) {

head = (DLinkList)malloc(sizeof(node));

head->data = 0;

p = head;

for(int i = 0;i < n;i++) {

q = (DLinkList)malloc(sizeof(node));

printf("请输入第%d/%d个数据 : ",i + 1,n);

scanf("%d",&q->data);

p->next = q;

p = q;

q->next = head;

}

}

Status print() {

p = head->next;

while(p != head) {

cout<data<<' ';

p = p->next;

}

cout<

return OK;

}

Status DCprint() {

p = head->prior;

if(p == head) {

cout<<"This is a empty List."<

return ERROR;

}

do {

cout<data<<' ';

p = p->prior;

}while(p != head);

cout<

return OK;

}

Status DCLinkList() {

q = head;

p = head->next;

while(p != head) {

p->prior = q;

q = p;

p = p->next;

}

head->prior = q;

return OK;

}

int main () {

cout<<"Please input the n : ";

cin>>n;

CreateList(n);

print();

DCLinkList();

DCprint();

system("pause");

return 0;

}

回答2:

单向链表和双向链表的区别在于:单向链表中,每个节点只有一个指向下一个节点的指针,而双向链表则有两个指针,分别指向上一个和下一个节点。因此,将单向链表改为双向链表是容易做到的,只要在每一个节点添加一个指针就OK了。
示例程序(c++):
node* list( node* head )
{
node *p,*q;
p = head;
q = NULL;
while( p != NULL ) //一边遍历,一边加前向指针
{
q->next = p;
q=p;
p = p->next;

}
return q; //返回双向链表的尾结点
}

回答3:

已知有一个单向循环链表,其每个结点从根结点找, 找到next, 把自身的地址赋给next所指的结点的prior, 如此一直