问题:实现单链表的逆置操作
解答:
#include<stdio.h>
typedef struct dNode{
int ch;
struct dNode *next;
}dNode;
dNode* change(dNode* chain)
{
//如果数目不够直接返回
if(chain==NULL || chain->next==NULL)
return chain;
dNode* temp,* pre;
while(chain)
{
//保存前一个结点
temp=chain;
chain=chain->next;
//用前一个结点与后一个结点互换,反转
temp->next=pre;
//移动指针
pre=temp;
}
return temp;
}
int main()
{
dNode *first,*end,*create;
char c;
for(int i=0;i<5;i++)
{
//设置节点,分配内存空间
create=(dNode*)malloc(sizeof(dNode));
create->ch = i;
//首节点与尾节点初始化
if(first==NULL){
first=create;
end=create;
}
else{
//尾节点设置
end->next=create;
end=create;
}
}
end->next=NULL;
//输出逆序前的结果
dNode* p=first;
while(p)
{
printf("%d ", p->ch);
p = p->next;
}
//进行逆序变换
dNode* ccg=change(first);
printf("\n\n");
//输出逆序后的结果
for(dNode* p=ccg;p;p=p->next)
printf("%d ",p->ch);
}