链接列表温度自动更改

时间:2018-09-23 05:21:49

标签: c pointers linked-list

我很难理解为什么temp在声明后为何将其值从9更改为1:

last->data = (*head_ref)->data;

我当前的目标是反转包含1、3、5、7和9的链表的第一个和最后一个节点中的数据。

我得到的结果是9、3、5、7、9。

如果temp等于last等于head_ref,即使我在更改last之后没有设置temp,也会改变last影响temp = last吗?

void reverseNode(struct Node** head_ref)
{
    struct Node *last = *head_ref;
    while(last->next != NULL)
    {
        last = last->next;
    }
    struct Node *temp = last;
    printf("%d ", temp->data);      // temp->data = 9
    last->data = (*head_ref)->data;
    printf("%d ", temp->data);      // temp->data = 1
    (*head_ref)->data = temp->data;
}

谢谢!

1 个答案:

答案 0 :(得分:-1)

void reverse(){
struct node *first=NULL,*second=start,*third=start->next;
if(start==NULL){
    printf("No Element to Reverse\n");
}else{
    while(second!=NULL){
        second->next=first;
        first=second;
        second=third;
        if(third!=NULL){
            third=third->next;
        }
    }

    start=first;
}
display(); }

此代码将反转整个链表,而不会丢失数据。