问题遇到的现象和发生背景
双链表转置(倒置)不起作用
问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<stdlib.h>
typedef struct DuLNode {
int data;
struct DuLNode* prior, * next;
}DuLNode, * DuLinklist;
//头插法建立双向链表
void CreteHeadList(DuLinklist* L, int n) {
DuLinklist p, r;
(L) = (DuLNode)malloc(sizeof(DuLNode));
(*L)->next = NULL;
(*L)->prior = NULL;
r = (*L);
int i = 0;
for (i = 0; i < n; i++) {
p = (DuLNode*)malloc(sizeof(DuLNode));
p->data = i;
if (r->next == NULL) {//插入第一个节点时与其他方法不一样
r->next = p;
p->prior = r;
p->next = NULL;
}
else {
p->next = r->next;
r->next->prior = p;
r->next = p;
p->prior = r;
}
}
}
void Reserve(DuLinklist*L)
{
DuLinklist p, q;
p = (*L);
(*L)->next= NULL;
(*L)->prior = NULL;
while (p->next != NULL) {
if ((*L)->next = NULL) {
q = p;
p = p->next;
(*L)->next = q;
q->prior = (*L);
q->next = NULL;
}
else {
q = p;
p = p->next;
q->next = (*L)->next;
(*L)->next->prior = q;
(*L)->next = q;
}
}
}
void TraverseList(DuLinklist* L) {
DuLinklist p;
p = (*L);
while (p->next != NULL) {
printf("%2d", p->next->data);
p = p->next;
}
}
int main()
{
DuLinklist La;
CreteHeadList(&La, 5);
TraverseList(&La);
Reserve(&La);
TraverseList(&La);
return 0;
}