为什么只传了指针就改变了链表?
#include <stdio.h>#include <stdlib.h>
typedef struct node {
int data;
struct node* next;
} LNode;
void split(LNode* A, LNode* &B)
{
LNode* p, * q, * r;
B = (LNode*)malloc(sizeof(LNode));
B->next = NULL;
r = B;
p = A;
while (p->next != NULL )
{
if (p->next->data % 2 == 0)
{
q = p->next;
p->next = q->next;
q->next = NULL;
r->next = q;
r = q;
}
else
p = p->next;
}
}
void create(LNode** head)
{
*head = (LNode*)malloc(sizeof(LNode));
(*head)->next = NULL;
LNode* temp = NULL, * r = *head;
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
temp = (LNode*)malloc(sizeof(LNode));
temp->next = NULL;
scanf("%d", &temp->data);
temp->next = r->next;
r->next = temp;
r = temp;
}
}
int main()
{
LNode* A, * B;
/*A = (LNode*)malloc(sizeof(LNode));
B = (LNode*)malloc(sizeof(LNode));*/
create(&A);
split(A, B);
while (A->next != NULL)
{
printf("%d ", A->next->data);
A = A->next;
}
putchar('\n');
while (B->next != NULL)
{
printf("%d ", B->next->data);
B = B->next;
}
return 0;
}
这个 split()函数为什么只传了
LNode *A, *B;
split(A, B);// void split(LNode *A, LNode *&B)
为什么这样就把A链表的指向给改了?改变链表的指向不应该是传入指针的地址吗? 本帖最后由 jhq999 于 2021-9-16 18:09 编辑
A只不过改变了next,它的表头没有改变,LNode *&B是指针B的引用,实参值随着形参变化而变化 jhq999 发表于 2021-9-16 18:06
A只不过改变了next,它的表头没有改变,LNode *&B是指针B的引用,实参值随着形参变化而变化
哦,只是用了A指向的空间,而不是改变的A
页:
[1]