📜  门| GATE-CS-2005 |第79章(1)

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

门| GATE-CS-2005 |第79章

简介

这是GATE-CS-2005考试中的一道题目,属于第79章的内容。这道题目主要考察了C语言编码能力以及计算机科学中的基本知识。

题目描述

以下是题目描述:

考虑结构体:

typedef struct node {
    int data;
    struct node *next;
} node;

现有一链表的头指针head以及一指向某个结点的指针ptr,且该结点是链表中的某个非尾结点。请编写一算法将该结点从所在的链表中删除,并插入到链表头部。

请实现函数:

void move_to_head(node *head, node *ptr);
解题思路

该题目需要我们实现一个单向链表的对于某一节点的删除和插入操作。这里我们可以使用指针的方法来实现上述操作,将要删除的节点的前、后置节点的指针指向即可。而插入的操作同样是我们需要通过指针操作来实现。

void move_to_head(node *head, node *ptr) {
    node *prev = NULL;
    node *cur = head;

    while (cur != ptr) {
        prev = cur;
        cur = cur->next;
    }

    prev->next = ptr->next;
    ptr->next = head;
    head = ptr;
}

上述代码通过遍历链表找到要删除节点的前置节点prev,当遍历到ptr时,让prev的next指向ptr的next,以实现节点的删除,然后再将这个被删除的节点插入链表头部。

结论

为了避免忘记复制代码,建议把上述代码复制下来,进行测试。这就是GATE-CS-2005考试中题目79的详细解析。