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

时间:2013-09-12 16:00:55

标签: c linked-list nodes

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

现在一本书的分配要求写一个C代码,其中用户输入将是列表中的数字,我们必须比较给定数字之前的数字和给定数字之后的数字,并告诉哪一个大小或相等,万一。为此,据我所知,我们需要两个指针即。 prev节点两侧的nextcurrent指向不同节点的两个数字,然后收集数据部分,我们可以比较它们。但是我无法在C中编写这部分代码。因此,指向所需节点的代码片段会很有帮助。

2 个答案:

答案 0 :(得分:4)

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

prevNode = NULL;
curNode = *p;

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

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

答案 1 :(得分:0)

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

  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;
    }