题解 | #牛牛的单向链表#
牛牛的单向链表
http://www.nowcoder.com/practice/95559da7e19c4241b6fa52d997a008c4
#include <stdio.h>
struct list{ int num; struct list *next; };
//链表内容打印 void ptink(struct test *head) { struct list *point=head;
while(point!=NULL)
{
printf("%d ",point->num);
point=point->next;//while里面的判断其实是在判断point->next是否为NULL
}
putchar('\n');
}
int main() { struct list *arr_list=NULL; struct list head_list=NULL; int i,n; scanf("%d",&n); int arr[n]; for(i=0;i<n;i++) { scanf("%d",&arr[i]); } //数组的输出 / for(i=0;i<n;i++) { printf("%d ",arr[i]); } printf("\n"); */ //利用尾插法 for(i=0;i<n;i++) { struct list *new_list=NULL; new_list = (struct list *)malloc(sizeof(struct list)); //开辟空间
new_list->num = arr[i];
new_list->next = NULL; //成员项赋值
if(arr_list == NULL)
{ //当目标链表为空链表的时候
arr_list = new_list; //当arr_list为空的时候 arr_list直接和new_list为一个链表
head_list = arr_list; //为什么要把这个头链表放这里?
//最开始arr_list为NULL,此时首次创建的时候则有地址指向了
//此时arr_list有指向位置了,所以最终的目标链表指向arr_list 最开始的头
//且这种只能满足 从空链表开始创建的时候使用
}
else
{
while(arr_list->next != NULL) //判断头链表的位置是否在尾部 (在尾部 arr_list->next == NULL)
{
arr_list = arr_list->next; //往后移动
}
arr_list->next = new_list;
}
// free(new_list);
}
ptink(head_list);
return 0;
}