数据结构 | 头插法创建单链表、遍历链表、删除链表 | C语言代码

题目:

        输入一系列自然数(0和正整数),输入-1时表示输入结束。按照输入的顺序,用头插法建立单链表,并遍历所建立的单链表,输出这些数据。注意 -1 不加入链表。

输入格式:

        第一行是一个正整数k,表示以下会有k组测试数据。

        每组测试数据是一系列以空格隔开的自然数(0和正整数)。数列末尾的 -1 表示本组测试数据结束。按照输入的顺序,用头插法建立单链表,并遍历所建立的单链表,输出这些数据。注意 -1 不加入链表。

输出格式:

        对于每组测试数据,输出链表中各节点的数据域。每个数据后有一个空格。每组测试数据的输出占1行。

输入样例:

3

1 2 3 4 5 -1

30 20 10 -1

4 2 2 1 1 2 0 2 -1

输出样例:

5 4 3 2 1

10 20 30

2 0 2 1 1 2 2 4

代码:

#include <stdio.h>
#include <stdlib.h>

// 定义单链表节点结构
struct Node {
    int data; // 数据域
    struct Node* next; // 指针域
};

// 创建链表的函数
struct Node* createLinkedList() {
    struct Node* head = NULL;
    int value;
 	
 	// 输入链表元素
    while (1) {
        scanf("%d", &value);
        
		// 判断是否插入节点
        if (value == -1) {
            break;
        }

		// 头插法
        struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
        newNode->data = value;
        newNode->next = head;
        head = newNode;
    }

    return head;
}

// 遍历链表
void traverseAndPrint(struct Node* head) {
    struct Node* current = head;
    while (current != NULL) {
        printf("%d ", current->data);
        current = current->next;
    }
    printf("\n");
}

// 删除链表释放内存
void deleteLinkedList(struct Node* head) {
    struct Node* current = head;
    while (current != NULL) {
        struct Node* temp = current;
        current = current->next;
        free(temp);
    }
}

int main() {
	// 输入链表节点个数
    int k;
    scanf("%d", &k);

	// 输入元素
    for (int i = 0; i < k; i++) {
        struct Node* head = createLinkedList();
        traverseAndPrint(head);
        deleteLinkedList(head);
    }

    return 0;
}

### 回答1: 7-9 头插法创建单链表头插法是一种在链表头部插入新节点的方法。具体步骤如下: 1. 定义一个指针p,指向链表头部。 2. 创建一个新节点,并将其数据域赋值为要插入的数据。 3. 将新节点的next指针指向p所指向的节点。 4. 将链表头部指针p指向新节点。 重复以上步骤,直到所有数据都插入到链表中。 遍历链表遍历链表是指按照链表节点的顺序,依次访问链表中的每个节点。具体步骤如下: 1. 定义一个指针p,指向链表头部。 2. 从链表头部开始,依次访问每个节点,直到链表尾部。 3. 在访问每个节点,可以输出节点的数据域,或者对节点进行其他操作。 删除链表删除链表是指将链表中的所有节点都删除,释放内存空间。具体步骤如下: 1. 定义一个指针p,指向链表头部。 2. 从链表头部开始,依次访问每个节点,释放节点的内存空间。 3. 在释放每个节点的内存空间,需要将节点的next指针指向NULL,以防止出现野指针。 ### 回答2: 单链表是一种常见的数据结构,它是由许多节点组成的,每个节点包含一个数据项和一个指向下一个节点的指针。接下来将介绍如何用头插法创建遍历删除单链表头插法创建单链表头插法是一种在链表头插入新节点的方法。当我们想要创建一个新的单链表,可以通过头插法快速创建。具体步骤如下: 1.定义一个指向链表头节点的指针head,将其初始化为NULL。 2.循环输入数据项,每次输入一个将会生成一个新节点p。 3.将p的指针域指向head当前所指向的节点。 4.将head指向p。 遍历链表遍历单链表是指按顺序访问链表中每一个节点的数据项。我们需要使用循环遍历整个链表。具体步骤如下: 1.定义一个指向链表头的指针p,将其初始化为head。 2.循环遍历链表,当p不为NULL,访问p所指向的节点数据项。 3.将p指向下一个节点。 删除链表删除单链表是将整个链表从内存中移除的过程。通常需要逐个释放链表中每个节点的内存空间。具体步骤如下: 1.定义两个指向链表头的指针p和q,将p初始化为head。 2.循环遍历链表,当p不为NULL,将q指向p当前所指向的节点。 3.将p指向下一个节点。 4.释放q指向的节点内存空间。 5.重复步骤2到步骤4,直到链表中的所有节点都被释放。 6.将head指向NULL,释放整个链表内存空间。 总之,头插法创建单链表遍历单链表删除单链表是使用单链表非常重要的基础操作。掌握这些基础操作可以帮助我们更好地理解和应用单链表。 ### 回答3: 7-9 头插法创建单链表遍历链表删除链表 1. 头插法创建单链表 头插法创建单链表是一种非常常用的方法,因为它能够保证插入新节点的间复杂度为 O(1)。 在创建链表候,我们可以从头节点开始,将新节点插入到链表的头部。具体步骤如下: (1)创建头节点并初始化为空节点; (2)读入第一个节点的值,创建节点,并将头节点的 next 指针指向它; (3)循环读入后续节点的值,创建节点,并将该节点的 next 指针指向头节点的 next,再将头节点的 next 指针指向该节点; (4)如果读入的值为链表结束的标志,结束循环。 2. 遍历单链表 遍历单链表是指将链表中所有节点依次访问一次。遍历单链表的方法有很多种,其中比较简单的方法是采用循环结构,从头节点开始依次访问每个节点,直到链表结束。 具体步骤如下: (1)将当前节点指向链表的头节点; (2)判断当前节点是否为空,如果为空,说明链表已经遍历完毕,退出循环; (3)处理当前节点,将其值输出并指向下一个节点; (4)重复以上步骤,直到遍历链表。 3. 删除单链表 删除链表是指将链表中的所有节点都删除,同释放所占用的内存空间。具体步骤如下: (1)将当前节点指向链表的头节点; (2)判断当前节点是否为空,如果为空,说明链表已经删除完毕,退出循环; (3)记录当前节点的指针,将当前节点的指针指向下一个节点; (4)释放记录的指针所指向的节点; (5)将当前节点指针指向记录的指针,重复以上步骤; (6)释放头节点的内存空间,链表删除完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值