注:这里仅给出将不带头结点的单链表的倒置
#include <stdio.h>
#include <stdlib.h>
typedef char ListData;
typedef struct node
{
ListData data;
struct node *link;
}ListNode;
typedef ListNode* LinkList;
LinkList CreatListF()//头插法创建无头结点的单链表
{
ListData ch;
LinkList head=NULL;
ListNode *p;
printf("头插法创建链表Please input the elements of the list:\n");
while((ch=getchar())!='\n')
{
p=(ListNode*)malloc(sizeof(ListNode));
p->data=ch;
p->link=head;
head=p;
}
return head;
}
LinkList CreatListR()//尾插法创建无头结点的单链表
{
ListData ch;
LinkList head=NULL;
ListNode *q=head,*p;
printf("尾插法创建链表Please input the elements of the list:\n");
while((ch=getchar())!='\n')
{
p=(ListNode*)malloc(sizeof(ListNode));
p->data=ch;
p->link=NULL;
if(head==NULL) head=p;
else q->link=p;
q=p;
}
return head;
}
LinkList Exchange(LinkList head)//链表倒置
{
ListData ch;
LinkList first=NULL;
ListNode *q=first,*p=head;
while(p!=NULL)
{
ch=p->data;
q=(ListNode*)malloc(sizeof(ListNode));
q->data=ch;
q->link=first;
first=q;
p=p->link;
}
return first;
}
void OutPut(LinkList head)//输出链表中的元素
{
printf("输出链表中的元素值:\n");
ListNode *p=head;
while(p!=NULL)
{
printf("%c\t",p->data);
p=p->link;
}
printf("\n");
}
int main()
{
LinkList head=CreatListF();//也可以换作LinkList head=CreatListR()
OutPut(head);
printf("将链表倒置:\n");
head=Exchange(head);
OutPut(head);
return 0;
}
运行结果: