#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int data;
Node* next;
};
typedef Node* List;
void init_List(List &l){
l = (Node*)malloc(sizeof(Node));
if(l==NULL){
printf("overflow\n");
return ;
}
l->next = NULL;
}
void add_element(List &l,int e){
Node *p = l;
while(p->next!=NULL){
p = p->next;
}
Node *tmp = (Node *)malloc(sizeof(Node));
tmp->data = e;
tmp->next = p->next;
p->next = tmp;
}
int main()
{
List La,Lb;
int n,e;
init_List(La);
init_List(Lb);
scanf("%d",&n);
while(n--)
{
scanf("%d",&e);
add_element(La,e);
}
scanf("%d",&n);
while(n--)
{
scanf("%d",&e);
add_element(Lb,e);
}
Node *p = La;
*La = *Lb;
while(p->next!=NULL){
p = p->next;
printf("%d ",p->data);
}
printf("\n");
p = Lb;
while(p->next!=NULL){
p = p->next;
printf("%d ",p->data);
}
printf("\n");
return 0;
}
其实大一的问题到大三来解决真是有点让人笑话了, 谁让学过c之后就一直没碰过了呢, 今天在复习数据结构手写一个链表都遇到问题,定义的一个表头指针传进去, 怎么都没有反应, 结果调bug的时候发现指针打印为-1!!!! (应该是0),经过询问,发现指针实际上可以理解为一个整数类型的变量, 该变量反应的是其他元素的地址,所有的人都要引以为戒哦, 学过面向对象语言的人会被指针迷惑, 谈到指针 就是引用, 但是 对于指针本身的值问题上, 我们可以毫不含糊的将它分别对待, 就当做一个普通变量, 函数内要初始化malloc分配一个随机地址给这个指针赋值, 形参要是不写& 引用 ,malloc的地址可以说就被存放在异次元了。。。 另外, c语言是没有自动回收这一说, 我做了一个实验, 讲两个不同链表的值相互赋值, 结果可以成功赋值, 那么问题来了: 之前多余的元素到哪儿了?
结果可想而知, 丢了。 虽然没有任何变量引用到他, 他还是像寄生虫一样扎根在内存中, 这也是c 和c++中很重要的内存管理问题, 动态分配的内存一定要手动释放, 否则必有后患~。 想自动管理内存, 可以使用c++ std标准库中的 shared_ptr , 之前学习cocos2d-x也提到过引用计数。贴上我这次试验的小代码。
感谢ftiasch给我的启示。