到目前为止,在Linked List中,我只使用一个temp
节点来遍历不同操作的给定链表,这非常容易。
现在一本书的分配要求写一个C代码,其中用户输入将是列表中的数字,我们必须比较给定数字之前的数字和给定数字之后的数字,并告诉哪一个大小或相等,万一。为此,据我所知,我们需要两个指针即。 prev
节点两侧的next
和current
指向不同节点的两个数字,然后收集数据部分,我们可以比较它们。但是我无法在C中编写这部分代码。因此,指向所需节点的代码片段会很有帮助。
答案 0 :(得分:4)
您不需要上一个指针。您只需要一个临时变量来跟踪前一个节点和当前节点,如下所示:
prevNode = NULL;
curNode = *p;
while (curNode != NULL)
{
prevNode = curNode;
curNode = curNode->next;
}
一旦找到了想要进行比较的位置,就可以使用prevNode的数据,curNode的数据和curNode-> next的数据。希望这会有所帮助。
答案 1 :(得分:0)
有两种方法可以做到这一点。
使用双向链表
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;
}
单链表
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;
}