【问题标题】:How can I change where a node points inside a function如何更改节点在函数内指向的位置
【发布时间】:2020-07-22 10:29:20
【问题描述】:

我想创建一个函数,在链表中搜索某个值,然后将包含它的节点和包含它的节点之前的节点放在两个单独的节点中。 这是我的代码,我不知道为什么它不起作用:

#include <stdio.h>
#include <stdlib.h>

struct node{
    int val;
    struct node* next;
};
typedef struct node node_t;

void printlist(node_t *head){
    node_t *temp=head;

    while (temp!=NULL){
        printf("%d -",temp->val);
        temp=temp->next;
    }
    printf("\n");
}
node_t *create_new_node(int value){
    node_t *result=malloc(sizeof(node_t));
    result->val=value;
    result->next=NULL;
    return result;
}



void *insert_after_node(node_t *node_to_insert,node_t *newnode){
    newnode->next=node_to_insert->next;
    node_to_insert->next=newnode;
}

void *find_node(node_t *head,int value,node_t *R,node_t *RA){
    node_t *tmp=head;
    while (R!=NULL && tmp!=NULL){
        if (tmp->val==value)
            R=tmp;
        else{
            RA=tmp;
            tmp=tmp->next;
        }
    }
}

int main(){
    node_t *head=NULL;
    node_t *tmp;
    node_t *R=NULL;
    node_t *RA=NULL;
    for (int i=0;i<25;i++){
        tmp=create_new_node(i);
        insert_at_head(&head,tmp);
    }

    find_node(head,13,R,RA);
    printlist(head);
    printlist(RA);
    printlist(R);
}

谢谢!

【问题讨论】:

  • 我不明白“然后把包含它的 节点节点之前 包含它的节点放在 two 单独的节点”它们已经在两个单独的节点中。
  • 是的,我只是想说我想把它们放在另外两个节点中,以便稍后在另一个函数中使用它们。

标签: c list linked-list nodes


【解决方案1】:

您想将 R 和 RA 的地址传递给 find_node。并将参数声明为 **

void *find_node(node_t *head,int value,node_t **R,node_t **RA){

然后在函数中使用(*R/*RA)

打电话给

find_node(head,13,&R,&RA);

在您的版本中,find_node 无法重新分配传入的指针。

【讨论】:

  • 你还需要修复while,我认为while (*R==NULL &amp;&amp; tmp!=NULL){不是!=
猜你喜欢
  • 2021-11-19
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
相关资源
最近更新 更多