释放链表内存C语言,最简单的链表删除第一个节点时释放内存的问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

1 #include

2

#include "list.h"

3

4 int IsEmpty(List L)

5 {

6      return L->Next == NULL;

7 }

8

9 int IsLast(Position P, List L)

10

{

11      return P->Next == NULL;

12 }

13

14 Position Find(int X, List L)

15 {

16      Position P;

17

18      P = L->Next;

19      while (P != NULL && P->Element != X)

20      {

21          P =

P->Next;

22      }

23

24      return P;

25 }

26

27 void Delete(int X, List

L)

28 {

29

Position P, TmpCell;

30

31      P = FindPrevious(X, L);

32

33      if (!IsLast(P, L))

34

{

35          TmpCell =

P->Next;

36          P->Next =

TmpCell->Next;

37

free(TmpCell);

38      }

39

40      return;

41 }

42

43 Position

FindPrevious(int X, List L)

44

{

45      Position P;

46

47      P = L;

48      while (P->Next !=

NULL && P->Next->Element != X)

49      {

50          P =

P->Next;

51      }

52

53      return P;

54 }

55

56 void Insert(int X, List L,

Position P)

57 {

58

Position TmpCell;

59

60      TmpCell = malloc(sizeof(struct Node));

61

62      if (TmpCell == NULl)

63

{

64          fprintf(stderr, "Out of

space!!!");

65          exit(1);

66      }

67

68

TmpCell->Element = X;

69

TmpCell->Next = P->Next;

70

P->Next = TmpCell;

71

72      return;

73 }

74

75 void DeleteList(List

L)

76 {

77

Position P, Tmp;

78

79      p = L->Next;

80

L->Next = NULL;

81      while (P != NULL)

82      {

83          Tmp = P->Next;

84

free(P);

85          P =

Tmp;

86      }

87

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中,要删除链表的最后一个节点,可以按照以下步骤进行操作: 1. 遍历链表,找到倒数第二个节点。 2. 将倒数第二个节点的next指针指向NULL,即将其指向空地址。 3. 释放最后一个节点内存空间。 下面是一个示例代码: ```c #include <stdio.h> #include <stdlib.h> // 定义链表节点结构体 struct Node { int data; struct Node* next; }; // 删除链表最后一个节点的函数 void deleteLastNode(struct Node** head) { // 如果链表为空,直接返回 if (*head == NULL) { return; } // 如果链表只有一个节点,直接删除节点 if ((*head)->next == NULL) { free(*head); *head = NULL; return; } // 找到倒数第二个节点 struct Node* secondLast = *head; while (secondLast->next->next != NULL) { secondLast = secondLast->next; } // 释放最后一个节点内存空间 free(secondLast->next); // 将倒数第二个节点的next指针指向NULL secondLast->next = NULL; } // 打印链表的函数 void printList(struct Node* node) { while (node != NULL) { printf("%d ", node->data); node = node->next; } printf("\n"); } int main() { // 创建链表 struct Node* head = NULL; struct Node* second = NULL; struct Node* third = NULL; head = (struct Node*)malloc(sizeof(struct Node)); second = (struct Node*)malloc(sizeof(struct Node)); third = (struct Node*)malloc(sizeof(struct Node)); head->data = 1; head->next = second; second->data = 2; second->next = third; third->data = 3; third->next = NULL; // 打印原始链表 printf("原始链表:"); printList(head); // 删除最后一个节点 deleteLastNode(&head); // 打印删除后的链表 printf("删除最后一个节点后的链表:"); printList(head); return 0; } ``` 运行以上代码,输出结果为: ``` 原始链表:1 2 3 删除最后一个节点后的链表:1 2 ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值