对指针C的混淆(链接列表)

ram*_*les 5 c pointers linked-list list

我正在尝试交换链表中两个相邻节点的地址.我尝试使用int temp变量交换它们的值,它完全正常.但现在,我想通过指针交换两个地址.不幸的是,它在我的while循环中创建了一个无限循环.这是我的代码片段:

使用int://工作得很好

node* swapNumbers(node* head, int data){
    int temp;
    node *cursor = head;

    while(cursor!=NULL){
        if(cursor->data == data){
            temp = cursor->data;
            cursor->data = cursor->next->data;
            cursor->next->data = temp;
            //printf("1: %d\n", cursor->data);
            //printf("2: %d\n", cursor->next->data);

            return cursor;      
        } 
        cursor = cursor->next;
    }
    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

使用地址://这创建了一个无限循环!

node* swapNumbers(node* head, int data){
    node *temp = NULL;
    node *cursor = head;

    while(cursor!=NULL){
        if(cursor->data == data){
            temp = cursor;
            cursor = cursor->next;
            cursor->next = temp;
        return cursor;      
        } 
        cursor = cursor->next;
    }
    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

我的typedef结构包含以下内容:

typedef struct node
{
    int data;
    struct node* next;
} node;
Run Code Online (Sandbox Code Playgroud)

我是C的新手,指针仍然让我感到困惑.任何帮助将不胜感激!

bey*_*rem 1

为了不进入无限循环,您需要将 的前驱值保存cursor在另一个指针指向的临时值中。