#include <stdio.h>
#include <malloc.h>
typedef struct node
{
int info;
struct node* next;
}node,*link;
node* change(link head)
{
link p,q;
p = head;
head = NULL;
while(p)
{
q= p->next ;
p->next = head ;
head = p ;
p = q;
}
return head;
}
void display(link head)
{
link p;
p=head;
while(p)
{
printf("%d ",p->info);
p=p->next;
}
}
node *nizhuan(node *head)
{
node *q,*p;
p=NULL;
while(head!=NULL) //
{
q=p;
p=head;
head=head->next;
p->next=q;
}
return p;
}
main()
{
link head,r,s;
int m;
head=r=NULL;
printf("请输入数据,以0 结尾:\n");
scanf("%d",&m);
while(m!=0)
{
s= (link)malloc(sizeof(node)) ;//
s->info =m;
if(head==NULL)
head=s;
else
r->next = s ;//
r=s;
scanf("%d",&m);
}
if(r)
r->next=NULL;
printf("输入单链表数据如下:\n");
display(head);
printf("逆置单链表数据如下:\n");
head=change(head);
printf("\n");
display(head);
}
使用struct,通过指针连接了一个链表,然后定义了包括链表生成,赋值,反向的操作
#include <stdio.h>
#include <malloc.h>
typedef struct node ----------定义了链表的节点结构,将结构定义为类型
{
int info; ------------链表的数据内容
struct node* next; ------------下一个链表节点的指针,使链表节点能连接起来
}node,*link; ------------定义节点结构类型为node,以及节点结构指针类型为link
node* change(link head) ------逆置链表
{
link p,q;
p = head;
head = NULL;
while(p)
{
q= p->next ;
p->next = head ;
head = p ; ------不断的修改节点,直到循环结束,head将指向尾节点,实现倒置
p = q;
}
return head;
}
void display(link head) -----显示链表所有节点的数据内容
{
link p;
p=head;
while(p) ---遍历链表,p为指向当前处理的节点指针
{
printf("%d ",p->info);
p=p->next; ---移动节点指针,指向下一个节点
}
}
node *nizhuan(node *head) ----链表逆转 --没用上,废的函数
{
node *q,*p;
p=NULL;
while(head!=NULL) //
{
q=p;
p=head;
head=head->next;
p->next=q;
}
return p;
}
main()
{
link head,r,s;
int m;
head=r=NULL;
printf("请输入数据,以0 结尾:\n");
scanf("%d",&m);
while(m!=0)
{
s= (link)malloc(sizeof(node)) ;//构造新的节点
s->info =m;
if(head==NULL) ---如果头节点为空,则新节点为头节点
head=s;
else
r->next = s ; -----使用尾插法增加新节点,s始终指向当前最后一个节点
r=s;
scanf("%d",&m);
}
if(r)
r->next=NULL;
printf("输入单链表数据如下:\n");
display(head);
printf("逆置单链表数据如下:\n");
head=change(head);
printf("\n");
display(head);
}