引言链表是C语言中一种重要的数据结构,它通过指针将多个节点连接起来,形成一种线性或非线性结构。链表在内存中分配不连续,因此在处理动态数据时具有灵活性。本文将详细解析几个常见的链表难题,并通过实战例题进...
链表是C语言中一种重要的数据结构,它通过指针将多个节点连接起来,形成一种线性或非线性结构。链表在内存中分配不连续,因此在处理动态数据时具有灵活性。本文将详细解析几个常见的链表难题,并通过实战例题进行讲解。
实现一个单链表的创建与遍历功能。
#include
#include
typedef struct Node { int data; struct Node* next;
} Node;
// 创建单链表节点
Node* createNode(int data) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = data; newNode->next = NULL; return newNode;
}
// 创建单链表
Node* createList(int arr[], int n) { Node* head = NULL; Node* tail = NULL; for (int i = 0; i < n; i++) { Node* newNode = createNode(arr[i]); if (head == NULL) { head = newNode; tail = newNode; } else { tail->next = newNode; tail = newNode; } } return head;
}
// 遍历单链表
void traverseList(Node* head) { Node* current = head; while (current != NULL) { printf("%d ", current->data); current = current->next; } printf("\n");
}
int main() { int arr[] = {1, 2, 3, 4, 5}; int n = sizeof(arr) / sizeof(arr[0]); Node* head = createList(arr, n); traverseList(head); return 0;
} 实现单链表的插入与删除功能。
// 在链表头部插入节点
void insertAtHead(Node** head, int data) { Node* newNode = createNode(data); newNode->next = *head; *head = newNode;
}
// 在链表尾部插入节点
void insertAtTail(Node** head, int data) { Node* newNode = createNode(data); if (*head == NULL) { *head = newNode; return; } Node* tail = *head; while (tail->next != NULL) { tail = tail->next; } tail->next = newNode;
}
// 删除指定位置的节点
void deleteNode(Node** head, int position) { if (*head == NULL) { return; } Node* temp = *head; if (position == 0) { *head = temp->next; free(temp); return; } for (int i = 0; temp != NULL && i < position - 1; i++) { temp = temp->next; } if (temp == NULL || temp->next == NULL) { return; } Node* next = temp->next->next; free(temp->next); temp->next = next;
}实现单链表的反转功能。
// 迭代法反转单链表
Node* reverseList(Node* head) { Node* prev = NULL; Node* current = head; Node* next = NULL; while (current != NULL) { next = current->next; current->next = prev; prev = current; current = next; } return prev;
}本文通过实战例题讲解了C语言编程中的链表难题。读者可以根据这些例题,结合自己的实际情况进行练习,加深对链表的理解。