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 }