#include <stdio.h>
#include <iostream>
using namespace std;
typedef struct DuLNode
{
int data;
DuLNode *prior;
DuLNode *next;
} DuLNode, *DuLinkList;
bool InitList(DuLinkList &L)
{
int num = 0;
L = new DuLNode;
L->data = 0;
L->next = nullptr;
DuLinkList r;
r = L;
if (L->data == 0)
{
printf("头节点初始化成功!\n");
}
else
{
return false;
}
printf("请输入要插入元素的个数:");
cin >> num;
for (int i = 1; i <= num; i++)
{
printf("请输入第%d个元素的值:", i);
DuLinkList s = new DuLNode;
s->prior = nullptr;
s->next = nullptr;
cin >> s->data;
r->next = s;
s->prior = r;
r = s;
}
return true;
}
bool PrintfDuList(DuLinkList L)
{
DuLinkList p = L->next;
if (!p)
{
return false;
}
while (p)
{
printf("%d ", p->data);
p = p->next;
}
return true;
}
void change(DuLinkList &L, DuLinkList &p)
{
DuLinkList q = p->prior;
if (q == L)
{
printf("前缀结点为头结点,不能交换顺序!\n");
return;
}
int temp;
temp = p->data;
p->data = q->data;
q->data = temp;
printf("交换成功!\n");
}
void findLNode(DuLinkList L, int value)
{
DuLinkList p = L->next;
while (p)
{
if (p->data == value)
{
change(L, p);
}
p = p->next;
}
}
int main()
{
DuLinkList A;
if (InitList(A))
{
printf("插入成功!\n");
}
if (PrintfDuList(A))
{
printf("\n双链表打印完成!\n");
}
else
printf("\n双链表没有元素!\n");
findLNode(A, 6);
PrintfDuList(A);
return 0;
}
运行结果如下