双向链表逆置
//逆置
DoubleLink nizhi(DoubleLink L,int n);
------------------------------------------
DoubleLink nizhi(DoubleLink L,int n)
{
//1,如果链表为空,
if(NULL==L)
return L;
//2,判断链表只有一个节点
if(L==L->next)
{
free(L);
L=NULL;
return L;
}
else
{
//3,存在多个节点
//找到倒数第一个节点
DoubleLink rear=L->prev;
DoubleLink p = L;
DoubleLink q = rear;
int i;
datatype t;
for(i=0;i<n/2;i++)
{
strcpy(t,p->data);
strcpy(p->data,q->data);
strcpy(q->data,t);
p=p->next;
q=q->prev;
}
}
return L;
}
-----------------------------------------------
#include "loop_double_head.h"
int main(int argc, const char *argv[])
{
DoubleLink L=NULL;
int n;
datatype e;
printf("请输入数据个数: ");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("请输入第 %d 个数据: ",i+1);
scanf("%s",e);
// L=insert_head(e,L);//头插
L=insert_rear(e,L);//尾插
}
//循环输出
output(L);
nizhi(L,n);
printf("-----------------逆置后为:-----------------\n");
output(L);
printf("-----------------逆置后为:-----------------\n");
---------------------------------------------------------------请输入数据个数: 6
请输入第 1 个数据: aa
请输入第 2 个数据: bb
请输入第 3 个数据: cc
请输入第 4 个数据: dd
请输入第 5 个数据: ee
请输入第 6 个数据: ff
正向遍历
aa bb cc dd ee ff
逆向遍历
ff ee dd cc bb aa
-----------------逆置后为:-----------------
正向遍历
ff ee dd cc bb aa
逆向遍历
aa bb cc dd ee ff
-----------------逆置后为:-----------------