C语言单向链表的构建
时间: 2025-02-03 11:14:00 浏览: 51
### C语言实现单向链表
#### 单向链表简介
单向链表是一种线性数据结构,在内存中不是连续存储的数据元素,而是通过指针链接起来的一系列节点。每个节点包含两部分:一部分用于保存实际数据;另一部分是一个指向下一个节点地址的指针。
#### 定义节点结构体
为了创建单向链表,首先定义一个表示列表项(即节点)的`struct`:
```c
typedef struct Node {
int data;
struct Node *next;
} Node, *NodePtr;
```
这里声明了一个名为`Node`的新类型以及其指针类型的别名`NodePtr`[^1]。
#### 初始化链表
可以编写如下函数来分配新节点并返回该节点的指针作为链表头部:
```c
NodePtr createList(void) {
return NULL; /* 初始情况下,空链表 */
}
```
此代码片段展示了如何初始化一个新的、完全空白的单向链表——简单地让头指针等于`NULL`即可[^2]。
#### 插入操作
下面展示的是在指定位置之前插入新元素的方法之一:
```c
void insertBefore(NodePtr *headRef, int newData, int key) {
NodePtr newNode = (NodePtr)malloc(sizeof(struct Node));
newNode->data = newData;
if (*headRef == NULL || (*headRef)->data >= key ) {
newNode->next = *headRef;
*headRef = newNode;
}
else {
NodePtr current = *headRef;
while(current->next!=NULL && current->next->data<key){
current=current->next;
}
newNode->next =current->next ;
current->next=newNode;
}
}
```
这段程序实现了在一个已有的有序序列里按顺序插入新的数值而不破坏原有排列的功能。
#### 删除操作
当需要移除特定值的第一个匹配实例时可采用下述方式:
```c
int deleteKey(NodePtr *head_ref, int key) {
NodePtr temp = *head_ref, prev;
// 如果要删除的就是第一个节点的情况
if (temp != NULL && temp->data == key) {
*head_ref = temp->next; // 修改头指针
free(temp); // 解放旧头结点所占空间
return 0;
}
// 查找待删节点及其前置节点
while (temp != NULL && temp->data != key) {
prev = temp;
temp = temp->next;
}
// 若未找到对应键,则退出
if (temp == NULL) return -1;
// 断开连接并释放资源
prev->next = temp->next;
free(temp);
return 0;
}
```
上述逻辑处理了多种情形下的删除请求,包括但不限于目标位于首部的情形。
#### 遍历打印链表内容
最后提供一段遍历整个链条并将各成员依次输出至屏幕上的实用工具函数:
```c
void printList(NodePtr n) {
printf("\n");
while(n != NULL) {
printf("%d -> ", n->data);
n=n->next;
}
puts("NULL\n");
}
```
以上就是利用C编程语言建立基本功能完备之单向链表所需的主要组件介绍。
阅读全文
相关推荐



















