📅  最后修改于: 2023-12-03 15:00:11.908000             🧑  作者: Mango
在C语言中,指针是一种重要的数据类型,它保存了某个变量的地址。指针链是多个指针变量的连接,形成了一个链表结构。指针链的特点是动态性强,可以根据需要在程序运行期间动态地添加、删除、修改链表结点。
链表可以通过手动创建来实现,也可以通过输入数据来创建。下面是手动创建的一个例子:
struct ListNode {
int value;
struct ListNode *next;
};
struct ListNode *createList()
{
struct ListNode *head, *p, *q;
head = (struct ListNode *)malloc(sizeof(struct ListNode));
head->next = NULL;
q = head;
for (int i = 1; i <= 5; i++) {
p = (struct ListNode *)malloc(sizeof(struct ListNode));
p->value = i;
p->next = NULL;
q->next = p;
q = p;
}
return head;
}
这段代码创建了一个有5个结点的链表,每个结点的value值等于其所在的位置。例如,第一个结点的value为1,第二个结点的value为2,依次类推。
遍历链表需要使用指针,通过指针访问链表的每个结点。以下代码实现了遍历上述创建的链表,并输出每个结点的value值:
struct ListNode *head = createList();
struct ListNode *p = head->next;
while (p != NULL) {
printf("%d ", p->value);
p = p->next;
}
在链表中插入一个结点,需要先找到要插入的位置,然后修改相应的指针即可。以下代码实现在上述创建的链表的第3个结点后插入一个新的结点,其value值为10:
struct ListNode *head = createList();
struct ListNode *p = head->next;
int pos = 2;
for (int i = 1; i < pos; i++) {
p = p->next;
}
struct ListNode *newNode = (struct ListNode *)malloc(sizeof(struct ListNode));
newNode->value = 10;
newNode->next = p->next;
p->next = newNode;
删除链表中的一个结点,只需要修改相应的指针即可。以下代码实现在上述创建的链表中删除第4个结点:
struct ListNode *head = createList();
struct ListNode *p = head->next;
int pos = 3;
for (int i = 1; i < pos; i++) {
p = p->next;
}
struct ListNode *delNode = p->next;
p->next = delNode->next;
free(delNode);
指针链是一种非常灵活的数据结构,在C语言中应用广泛。学会指针链的基本操作后,可以在C语言中高效地处理各种数据结构。