您的位置:首页 > 理论基础 > 数据结构算法

单链表的逆置

2013-10-07 23:13 330 查看
#include<stdio.h>
#include<malloc.h>

typedef int DataType;

//数据结构的定义
typedef struct node{

DataType data;

struct node *next;
}LinkNode,*LinkList;

//利用尾插法建立链表
LinkNode *CreateList()
{
LinkNode *head,*p,*q;  //p指针为过度指针,q为申请的新节点

DataType data;

int flag=1;

head=p=(LinkNode *)malloc(sizeof(LinkNode)); //申请头节点
while(flag){
scanf("%d",&data);
if(data > 0){
q=(LinkNode *)malloc(sizeof(LinkNode));
q->data=data;

p->next=q;
p=q;
}else{
flag=0;
p->next=NULL;
}
}
return head;
}

//利用头插法的思想逆置
void ReverseList(LinkList head)
{
LinkList p,q;

p=head->next;
head->next=NULL;

while(p != NULL){
q=p->next;
p->next=head->next;
head->next=p;
p=q;
}
}
//打印链表
void PrintList(LinkList head)
{
LinkList q;
q=head->next;
while(q!=NULL){
printf("%-3d",q->data);
q=q->next;
}

printf("\n");
}
int main(int args,int *argv[])
{
LinkNode *head;

printf("please input the list:\n");
head=CreateList();

printf("print the list:\n");
ReverseList(head);

PrintList(head);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息