c语言数据结构中单链表的原地逆置

单链表的运用单链表原地逆置,刚出炉的代码,已在VS上编译运行成功,代码如下:

#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define TURE 1
#define ERROR 0
#define FALSE 0
#define OVERFLOW -1
#define LISTINCREMENT 10
#define INIT_LIST_SIZE 100
typedef int  Status;
typedef int  ElemType;
typedef struct LNode 
{
ElemType data;
struct LNode *next;
}LNode, *LinkList;


int main()
   {
       
Status INITLIST(LinkList &L);
   LinkList CreateLinkList (int n);
void TraverLinkList(LinkList L);


int i,n;
        LinkList L;
INITLIST(L);
LinkList p,q;
p=L->next;
q=L->next;
 
printf("请输入初始链表产度:");
scanf_s("%d",&n);
L=CreateLinkList(n);


printf("\n链表中的元素为:");
TraverLinkList(L);
printf("\n");


printf("现在开始逆置.....\n");
p = L->next;
L->next = NULL;
while (p)
{
q = p->next;
p->next = L->next;
L->next = p;
p = q;
}
printf("逆置后链表中的元素为:");
TraverLinkList(L);
printf("\n");


return 0;
}


LinkList CreateLinkList(int n)//创建单链表
{
int length, i, value;  //有效结点的长度 value用来存放用户输入的结点的值,创建了一个不存放有效数据的头结点
LinkList  L = (LinkList)malloc(sizeof(LNode));
if (NULL == L)
{
printf("内存分配失败,程序退出!\n");
exit(-1);
}


LinkList q = L; //q始终指向尾结点
q->next = NULL; //清空指针域
printf("\n");


for (i = 0; i<n; i++)
{
printf("请输入第%d个结点的值:", i + 1);
scanf_s("%d", &value); printf("\n");


LinkList p = (LinkList)malloc(sizeof(LNode));


p->data = value;  //向新结点中放入值
q->next = p; //将尾结点指向新结点
p->next = NULL;  //将新结点的指针域清空
q = p;   //将新结点赋给pTail,使pTail始终指向为尾结点
}
return L;
}


void TraverLinkList(LinkList L)//遍历打印
{
LinkList p = L->next;


while (p)
{
printf("%5d", p->data);
p = p->next;
}
}


Status INITLIST(LinkList &L)//初始化链表
{
L = (LinkList)malloc(sizeof(LNode));
 if (!L)
exit(OVERFLOW);
L->next = NULL;
return OK;
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值