📜  C中的指针链与示例(1)

📅  最后修改于: 2023-12-03 15:00:11.908000             🧑  作者: Mango

C中的指针链与示例

在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语言中高效地处理各种数据结构。