编写一个函数,实现将一个带头结点的双链表表数据逆置,代码该怎么下手思考呢?
https://blog.csdn.net/HTLYing/article/details/127201190?spm=1001.2014.3001.5502
你可以看下我这个博客,写的是双向链表
#include <bits/stdc++.h>
using namespace std;
int main()
{
int data[101], next[101];
int n;
scanf("%d", &n);
for(int i = 1; i <= n; i++)
scanf("%d", &data[i]);
int len = n;
for(int i = 1; i <= n; i++)
{
if(i!=n)
next[i] = i+1;
else
next[i] = 0;
}
int t = 1;
while(t != 0)
{
printf("%d ", data[t]);
t = next[t];
}
return 0;
}
输入输出也上述结果是一致的,而且在代码实现上,模拟链表更为简单和方便
供参考:
//带头结点的双向链表的就地逆置
void invert(DuLinkList*& L)
{
DuLinkList* q;
DuLinkList* p = L->next; // 将 p 指向链表 L 的第一个结点,同时将头结点L从链表中脱离
L->next = NULL; // 成一个独立的结点
while (p != NULL) // 此时 p 指向链表的第一个结点
{
q = p->next; // q 指向链表的第二个结点,即 p结点的下一个结点
p->next = L->next; //头插法将第一个结点 p 链入头结点 L
p->prior = q; //将 p 结点前驱指针修改为指向 第二个结点 q
L->next = p; //头插法将第一个结点 p 链入头结点 L
p = q; //上述动作完成后,让 p 指向第二个结点 q ,准备第二个结点的 逆置
}
}