typedef struct lnode{
int data;
struct lnode *next;
} lnode;
void traverse(lnode list); //遍历打印
lnode Last(lnode* list); //定位最后一个节点
lnode* newNode(int value); //新增一个节点
void Merge(lnode* old,lnode* new); //合并两个链表
void traverse(lnode *list)
{
while(list != NULL)
{
printf("%d ",list->data);
list= list->next;
}
printf("\n");
}
lnode* Last(lnode* list)
{
while(list->next != NULL)
{
list = list->next;
}
return list;
}
lnode* newNode(int value)
{
lnode* l = malloc(sizeof(lnode));
l->data = value;
l->next = NULL;
return l;
}
void Merge(lnode* old,lnode* new)
{
Last(old)->next = new;
}
int main()
{
lnode* a = newNode(1);
Merge(a,newNode(2));
Merge(a,newNode(3));
traverse(a);
traverse(a);//同样是传入指针参数,为什么Merge函数改变了实参,traverse函数没有改变
}
traverse只改变了指针变量,merge改变了指针指向的东西,改指针变量的值和改int double这些标量的值是一样的