C语言实现带头结点单链表

废话不多说,直接上代码:
先是.h文件,用来定义成员方法和成员变量:

#pragma once
#define TRUE 1
#define FALSE 0  //C语言里没有bool 故用宏定义实现

 typedef int ElemType;

 typedef union Data
 {
   
	 ElemType val;
	 int length;
 }Data;

 typedef struct Node
 {
   
	 Data data;//数据域
	 struct Node *next;//指针域
 }Node;

 typedef struct HList
 {
   
	 Node head;
 }HList,*pHList;

 //初始化
 void InitHList(pHList list);

 //显示元素
 void ShowHList(pHList list);

 //按位置插入  头插  尾插
 int InsertHListPos(pHList list,ElemType val,int pos);
 int InsertHListHead(pHList list,ElemType val);
 int InsertHListTail(pHList list,ElemType val);

 //按位置删  头删  尾删
 int DeleteHListPos(pHList list,int pos);
 int DeleteHListHead(pHList list);
 int DeleteHListTail(pHList list);

 //按值删
 int DeleteHListVal(pHList list,ElemType val);

//去重
 int DeleteHListRepeatVal(pHList list);

//清空
 void ClearHList(pHList list);

//销毁
 void DestroyHList(pHList list);

之后是.c文件,用来编写实现的方法:

#include "HList.h"
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>

//判空操作
static void DeterPointIsNull(pHList list)
{
   
	assert(list != NULL);
	if(list 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是用C语言实现带头链表就地逆置的成员函数的代码: ```c #include <stdio.h> #include <stdlib.h> // 定义链表构体 typedef struct ListNode { int data; struct ListNode* next; } ListNode; // 初始化带头点的链表 ListNode* initList() { ListNode* head = (ListNode*)malloc(sizeof(ListNode)); head->next = NULL; return head; } // 尾插法建立链表 void createList(ListNode* head) { int data; ListNode* tail = head; printf("请输入链表中的元素(以-1束):"); while (1) { scanf("%d", &data); if (data == -1) { break; } ListNode* newNode = (ListNode*)malloc(sizeof(ListNode)); newNode->data = data; newNode->next = NULL; tail->next = newNode; tail = newNode; } } // 打印带头点的链表 void printList(ListNode* head) { ListNode* p = head->next; while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); } // 就地逆置带头点的链表 void reverseList(ListNode* head) { ListNode* p = head->next; ListNode* q = p->next; p->next = NULL; // 将第一个点的指针域赋值为NULL while (q != NULL) { ListNode* r = q->next; q->next = p; p = q; q = r; } head->next = p; // 将头点的指针域指向原链表的最后一个点 } int main() { ListNode* head = initList(); createList(head); printf("原链表:"); printList(head); reverseList(head); printf("逆置后的链表:"); printList(head); return 0; } ``` 运行果: ``` 请输入链表中的元素(以-1束):1 2 3 4 5 -1 原链表:1 2 3 4 5 逆置后的链表:5 4 3 2 1 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值