第一次的尝试,暴力下移,直接提出来构造一个函数。
有一个问题。这个函数中我们要修改head,但是原函数是不修改的
可以按照算法书上的方案来进行,
定义一个全局变量。
但是全局变量是有害的,这个只能起一次作用,如果这个程序中有n多个链表呢
这次的修改,不同,返回了head,有了一定的优化。
缺点是程序员得非常认真的使用这个函数。如果忘了,程序就错误了。
第三种方案
这里传入一个指针的指针进去。
第四种有点复杂的哦
那就是再次定义一个结构体List
好处在于,我们用了一种自己定义的数据结构来表示链表。
这个给我们以后来进行更大的操作,埋下了无限的可能。
#include <stdio.h>
#include <stdlib.h>
typedef struct _note{
int value;
struct _note *next;
}Node;
typedef struct _list{
Node*head;
}List;
void add(List *pList,int number);
int main()
{
List list;
int number;
// 指针的主要步骤定义一个头
list.head = NULL;
while (scanf("%d",&number)&&number+1){
add(&list,number);
}
return 0;
}
void add(List *pList,int n){
Node *p = (Node*)malloc(sizeof(Node));
p->value = n;
p->next = NULL;
// 现在我要遍历找到原来储存的最后一个链表节点
Node *last = pList->head;
//还要判断那个last有没有数据,可能只有head
if (last){
while (last->next){
last = last->next;
}
last->next = p;// 哈哈,把p给接上了
}else {
pList->head = p;
}
}
这个就是我目前接触到最牛逼的东西了
特别一点的地方:链表的遍历
附上原稿。