9.30:单链表的翻转
效果
![](https://i-blog.csdnimg.cn/blog_migrate/6162609be6372e0bca5b1c8bc67d56fd.png)
翻转代码
//单链表的翻转
int linklist_overturn(linklist* PH)
{
if(*PH==NULL||(*PH)->next==NULL)
{
return -1;
}
linklist H=*PH;
linklist p=H->next;
H->next=NULL;
while(p)
{
linklist q=p;
p=p->next;
q->next=H;
H=q;
}
*PH=H;
return 0;
}
完整代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef int data_t;
typedef struct Node
{
data_t val;
struct Node* next;
}*linklist;
//节点的创建
linklist link_create(data_t value);
//单链表的头插
int linklist_push_front(linklist* PH,data_t value);
//单链表的遍历
int linklist_show(linklist H);
//单链表的翻转
int linklist_overturn(linklist* PH);
int main(int argc, const char *argv[])
{
linklist H=NULL;
int value=0;
printf("please input :\n");
while(1)
{
scanf("%d",&value);
linklist_push_front(&H,value);
if(getchar()=='\n')
break;
}
printf("before-overturn\n");
linklist_show(H);
printf("after-overturn\n");
linklist_overturn(&H);
linklist_show(H);
return 0;
}
//节点的创建
linklist link_create(data_t value)
{
linklist newsnode=(linklist)malloc(sizeof(struct Node));
if(newsnode==NULL)
{
printf("malloc fail\n");
return NULL;
}
newsnode->next=NULL;
newsnode->val=value;
return newsnode;
}
//单链表的头插
int linklist_push_front(linklist* PH,data_t value)
{
linklist newsnode=link_create(value);
if(NULL==*PH)
{
*PH=newsnode;
return 0;
}
linklist H=*PH;
newsnode->next=H->next;
H->next=newsnode;
newsnode->val=H->val;
H->val=value;
return 0;
}
//单链表的遍历
int linklist_show(linklist H)
{
if(H==NULL)
{
printf("linklist is empty\n");
return -1;
}
linklist p=H;
printf("show : ");
while(p)
{
printf("%d ",p->val);
p=p->next;
}
puts("");
return 0;
}
//单链表的翻转
int linklist_overturn(linklist* PH)
{
if(*PH==NULL||(*PH)->next==NULL)
{
return -1;
}
linklist H=*PH;
linklist p=H->next;
H->next=NULL;
while(p)
{
linklist q=p;
p=p->next;
q->next=H;
H=q;
}
*PH=H;
return 0;
}