如何在C中指向当前节点的上一个节点和当前节点的下一个节点



到目前为止,在链表中,我只使用了一个temp节点来遍历不同操作数的给定链表,这非常容易。

现在,一本书的作业需要编写一个 C 代码,其中用户输入将是列表中的一个数字,我们必须比较给定数字之前的数字和给定数字之后的数字,并判断哪个更大或相等,以防万一。为此,据我说,我们需要两个指针,即。 prevnext节点的两侧current指向不同节点上的两个数字,然后收集数据部分,我们可以比较它们。但是我不能用 C 语言编写这部分。因此,指向所需节点的代码片段会有所帮助。

你不需要上一个指针。你只需要一个临时变量来跟踪上一个和当前节点,如下所示:

prevNode = NULL;
curNode = *p;
while (curNode != NULL)  
{
  prevNode = curNode;
  curNode = curNode->next;
}

一旦找到要进行比较的位置,就可以使用 prevNode 的数据、curNode 的数据和 curNode->next 的数据。希望这有帮助。

有两种方法可以做到这一点。

  1. 使用双向链表

    typedef struct node {
        struct node *prev, next;
        int data;
    } node_t;
    /*
     * Return 1 if prev data is greater then next data, else 0.
     * return -1 if invalid input.
     */
    int compare(node_t *head, int num)
    {
        node_t *p;
        if (head == NULL || head->data == num || head->next == NULL)
           return -1;
        p = head->next;
        while (p->next != NULL) {
            if (p->data == num) {      
                return (p->prev->data > p->next->data ? 1 : 0);
            }
            p = p->next;
        }
        return -1;
    }
    
  2. 单链表

    typedef struct node {
        struct node *next;
        int data;
    } node_t;
    /*
     * Return 1 if prev data is greater then next data, else 0.
     * return -1 if invalid input.
     */
    int compare(node_t *head, int num)
    {
        node_t *p, *q;
        if (head == NULL || head->data == num || head->next == NULL)
           return -1;
        p = head;
        q = head->next;
        while (q->next != NULL) {
            if (q->data == num) {      
                return (p->data > q->next->data ? 1 : 0);
            }
            p = q;
            q = q->next;
        }
        return -1;
    }
    

相关内容

  • 没有找到相关文章

最新更新