单链表的逆置

#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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值