c语言单链表的就地置换,单链表逆置(就地逆序) C语言实现

本文介绍如何使用C语言定义和操作链表,包括创建空链表、插入元素并保持长度统计,以及实现链表反转。通过实例展示了初始化链表、插入节点和计算链表长度的方法,适合学习基础数据结构的朋友。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LinkList.h

#ifndef LINKLIST_H

#define LINKLIST_H

typedef int ElemType;

typedef struct LNode

{

ElemType *data;

struct LNode *next;

int length;

}LNode, *LinkList;

LinkList initList();

void insertList(LinkList l, ElemType *data, int sizeOfData);

int length(LinkList l);

void reverse(LinkList l);

#endif

LinkList.c

#include "LinkList.h"

#include

#include

//************************************

// Method: initList

// FullName: initList

// Access: public

// Returns: LinkList

// Qualifier:

//************************************

LinkList initList()

{

LinkList l = 0;

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

if(l == NULL)

return NULL;

l->data = 0;

l->next = NULL;

l->length = 0;

return l;

}

//************************************

// Method: insertList

// FullName: insertList

// Access: public

// Returns: void

// Qualifier:

// Parameter: LinkList l

// Parameter: ElemType * data

// Parameter: int sizeOfData

//************************************

void insertList(LinkList l, ElemType *data, int sizeOfData)

{

LNode *n = 0;

if(l == NULL || data == NULL)

return;

n = (LNode *)malloc(sizeof(LNode));

if(n == NULL)

return;

n->data = (ElemType *)malloc(sizeof(ElemType));

if(n->data == NULL)

{

free(n->data);

free(n);

return;

}

memcpy(n->data, data, sizeOfData);

n->next = l->next;

l->next = n;

l->length++;

}

//************************************

// Method: length

// FullName: length

// Access: public

// Returns: int

// Qualifier:

// Parameter: LinkList l

//************************************

int length(LinkList l)

{

if(l == NULL)

return 0;

return l->length;

}

//************************************

// Method: reverse

// FullName: reverse

// Access: public

// Returns: void

// Qualifier:

// Parameter: LinkList l

//************************************

void reverse(LinkList l)

{

LinkList p, q, r;

if(l == NULL)

return;

p = l->next;

q = p->next;//q为p下一个节点

while(q)

{

r = q->next;//r为q下一个节点

q->next = p;//指针回指

p = q;

q = r;//p, q后移 *关键是对指针间赋值的理解*

}

l->next = p;

}

main.c

#include "LinkList.h"

#include

int main()

{

ElemType num1 = 1, num2 = 2, num3 = 3;

LinkList l = initList();

LinkList l2 = initList();

insertList(l, &num1, sizeof(ElemType));

insertList(l, &num2, sizeof(ElemType));

insertList(l, &num3, sizeof(ElemType));

reverse(l);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值