C语言单链表具体代码实现
时间: 2023-09-18 16:06:14 浏览: 129
C语言单链表的实现代码
3星 · 编辑精心推荐
### 回答1:
单链表是一种常见的数据结构,它由多个结点组成,每个结点都有一个指向下一个结点的引用,最后一个结点的引用指向NULL。C语言实现的单链表的具体代码如下所示: struct node
{
int data;
struct node *next;
};
struct node *head = NULL; // 定义一个头指针
// 插入一个新结点
void insert(int data)
{
struct node *newNode = (struct node*)malloc(sizeof(struct node));
newNode->data = data;
newNode->next = head;
head = newNode;
}
// 删除一个结点
void delete(int data)
{
struct node *prev = NULL;
struct node *ptr = head;
// 找到要删除的结点
while (ptr != NULL && ptr->data != data)
{
prev = ptr;
ptr = ptr->next;
}
// 如果找到了要删除的结点
if (ptr != NULL)
{
// 如果要删除的结点是头指针
if (prev == NULL)
head = ptr->next;
else
prev->next = ptr->next;
free(ptr);
}
}
### 回答2:
C语言单链表的具体代码实现如下:
```
#include<stdio.h>
#include<stdlib.h>
//定义链表的节点结构
struct ListNode {
int val; //当前节点的值
struct ListNode* next; //指向下一个节点的指针
};
//创建链表节点
struct ListNode* createNode(int val) {
struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
newNode->val = val;
newNode->next = NULL;
return newNode;
}
//插入节点到链表头部
void insertNodeAtHead(struct ListNode** head, int val) {
struct ListNode* newNode = createNode(val);
newNode->next = *head;
*head = newNode;
}
//插入节点到链表尾部
void insertNodeAtTail(struct ListNode** head, int val) {
struct ListNode* newNode = createNode(val);
if (*head == NULL) {
*head = newNode;
}
else {
struct ListNode* temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
//删除链表中指定值的节点
void deleteNode(struct ListNode** head, int val) {
struct ListNode* temp = *head;
if (temp != NULL && temp->val == val) {
*head = temp->next;
free(temp);
return;
}
while (temp != NULL && temp->next != NULL) {
if (temp->next->val == val) {
struct ListNode* delNode = temp->next;
temp->next = temp->next->next;
free(delNode);
return;
}
temp = temp->next;
}
}
//打印链表
void printList(struct ListNode* head) {
struct ListNode* temp = head;
while (temp != NULL) {
printf("%d ", temp->val);
temp = temp->next;
}
printf("\n");
}
int main() {
//创建一个头节点并初始化
struct ListNode* head = createNode(0);
//插入节点到链表头部
insertNodeAtHead(&head, 1);
insertNodeAtHead(&head, 2);
insertNodeAtHead(&head, 3);
//插入节点到链表尾部
insertNodeAtTail(&head, -1);
insertNodeAtTail(&head, -2);
insertNodeAtTail(&head, -3);
//打印链表
printList(head);
//删除链表中的节点
deleteNode(&head, 1);
//打印链表
printList(head);
return 0;
}
```
以上是一个简单的使用C语言实现单链表的代码。其中,我们通过定义`struct ListNode`结构体表示链表的节点,然后通过使用不同的方法来插入和删除节点,并通过`printList`函数来打印链表的所有节点。在主函数中,我们创建了一个头节点并进行了插入和删除节点的操作,最后打印了链表。
### 回答3:
单链表是一种常见的数据结构,用于存储线性表的数据。C语言可以通过定义结构体和指针的方式实现单链表。
首先,我们需要定义节点的结构体。
```c
typedef struct Node {
int data; // 数据域
struct Node* next; // 指针域,指向下一个节点
} Node;
```
然后,我们可以定义一些基本的操作,如创建链表、插入节点、删除节点等。
1. 创建链表:
```c
Node* createList(int data) {
Node* head = (Node*)malloc(sizeof(Node)); // 创建头节点
head->data = data;
head->next = NULL;
return head;
}
```
2. 插入节点:
```c
void insertNode(Node* head, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = head->next;
head->next = newNode;
}
```
3. 删除节点:
```c
void deleteNode(Node* head, int data) {
Node* prev = head;
Node* curr = head->next;
while (curr != NULL) {
if (curr->data == data) {
prev->next = curr->next;
free(curr);
break;
}
prev = curr;
curr = curr->next;
}
}
```
这些是单链表的一些基本操作,可以根据需求进一步扩展。需要注意的是,在使用完链表后,要及时释放内存,避免内存泄漏。
以上就是C语言实现单链表的具体代码。希望对你有帮助!
阅读全文