时间:2024-11-04 来源:网络 人气:
链表是C语言中常用的一种数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表具有灵活的插入和删除操作,因此在各种场景下都有广泛的应用。
在C语言中,链表通常由结构体定义,每个结构体包含数据和指向下一个节点的指针。以下是一个简单的链表节点结构体定义:
```c
typedef struct Node {
int data;
struct Node next;
} Node;
创建链表的第一步是创建一个头节点,头节点不存储数据,仅作为链表的起始点。以下是一个创建链表的示例代码:
```c
Node createList() {
if (head == NULL) {
return NULL;
}
head->next = NULL;
return head;
链表的插入操作分为头插法、尾插法和指定位置插入。以下分别介绍这三种插入方法:
头插法
```c
void insertAtHead(Node head, int data) {
if (newNode == NULL) {
return;
}
newNode->data = data;
newNode->next = head->next;
head->next = newNode;
尾插法
```c
void insertAtTail(Node head, int data) {
if (newNode == NULL) {
return;
}
newNode->data = data;
newNode->next = NULL;
Node temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
指定位置插入
```c
void insertAtPosition(Node head, int data, int position) {
if (position data = data;
Node temp = head;
for (int i = 1; temp != NULL && i next;
}
if (temp == NULL) {
free(newNode);
return;
}
newNode->next = temp->next;
temp->next = newNode;
链表的删除操作同样分为头删法、尾删法和指定位置删除。以下分别介绍这三种删除方法:
头删法
```c
void deleteAtHead(Node head) {
if (head->next == NULL) {
free(head);
return;
}
Node temp = head->next;
head->next = temp->next;
free(temp);
尾删法
```c
void deleteAtTail(Node head) {
if (head->next == NULL) {
free(head);
return;
}
Node temp = head;
while (temp->next->next != NULL) {
temp = temp->next;
}
free(temp->next);
temp->next = NULL;
指定位置删除
```c
void deleteAtPosition(Node head, int position) {
if (position next == NULL) {
return;
}
Node temp = head;
for (int i = 1; temp->next != NULL && i next;
}
if (temp->next == NULL) {
return;
}
Node toDelete = temp->next;
temp->next = toDelete->next;
free(toDelete);
链表的遍历操作是指从链表的头节点开始,依次访问链表中的每个节点。以下是一个遍历链表的示例代码:
```c
void traverseList(Node head) {
Node temp = head->next;
while (temp != NULL) {
printf(