1 #include "stdafx.h"
2 #include <iostream>
3
4 using namespace std;
5 //所谓的链表,肯定有头有尾,它不是一个孤独的存在。它的值随着整体变换而变换
6 //千万不要私自释放掉其中的任何一个结点的值,很可能会造成,链表断裂的情况。
7
8 typedef struct Linklist
9 {
10 int data;
11 Linklist *next;
12 } Linklist,*plinklist;
13
14 plinklist Create(plinklist &linklist,int num)//这里是引用
15 {
16 plinklist p = NULL;//给地址不代表已经分配内存
17 linklist = new Linklist;//分配内存
18 linklist ->next = NULL;
19 for(int i = 0 ;i < num; i++)
20 {
21 p = new Linklist;
22 scanf("%d",&p->data);
23 p ->next = linklist ->next;
24 linklist ->next = p;
25 //delete(p);//千万不能删掉p。貌似p和linklist已经联系在一起。
26 //p删除会导致linklist里面的指向也会出现问题。
27 }
28 return linklist; //
29 }
30
31 void Print(plinklist &linklist)
32 {
33 plinklist p;
34 p = linklist ->next;
35 while(p)
36 {
37 printf("%d ",p->data);
38 p = p ->next;
39 }
40 }
41 int main()
42 {
43 plinklist linklist;//到此,只是分配了一个地址值,并没有开辟空间
44 Linklist link;//定义变量并没有声明,内存地址是在运行时分配给你
45 link.data = 5;
46 int num;
47 cout << "请输入插入点的数量" <<endl;
48 cin >> num;
49 cout << endl;
50 plinklist l = Create(linklist,num); //以上算法是有问题的,必须返回的链表才是正确的。
51 Print(l);
52 return 0;
53 }