单链表的删除和尾插法创建部分
1 int Remove(LinkList &first,int i,DataType &x){ 2 LinkNode *p=Locate(first,i-1); //定位于第i-1个结点 3 if(p==NULL||p->next==NULL) 4 return 0; 5 LinkNode *q=p->next; //用q保存被删除结点的地址 6 p->next=q->next; //重新拉链,将被删除结点从链中取下 7 x=q->data; //取出被删除结点中的数据,释放结点 8 free(q); 9 return 1; 10 } 11 //删除表中第i个元素,通过引用型参数x返回该元素的值
1 //尾插法创建单链表 2 #include "LinkList.h" 3 void createListRear (LinkList &last,DataType endtag){ //endtag是结尾 4 DataType val; 5 scanf("%d",&val); 6 if(val==endtag) 7 last==NULL; 8 else{ 9 last=(LinkNode *)malloc(sizeof(LinkList)); //创建新结点 10 if(!last){ 11 printf("存储分配错误!\n"); 12 exit(1); 13 } 14 last->data=val; 15 createListRear(last->next,endtag); //递归创建后续链表 16 } 17 } 18 void main(void){ 19 LinkList L; 20 DataType endtag; 21 scanf("%d",&endtag); //输入约定的输入结束标志 22 L=(LinkNode *)malloc(sizeof(LinkList)); 23 if(!L){ 24 printf("存储分配错误!\n"); 25 exit(1); 26 } 27 LinkNode *rear=L; //尾指针,初始时指向头结点 28 createListRear(rear->next,endtag); //递归建立单链表 29 printList(L->next); //调用了printList函数; 30 }
今日小结:p++与p->next 的区别
“假如你处理的是数组,那么p指向当前的数组值,p++就是指向下一个数组值,因为数组的数值在内存里面是排列在一起的,(p++主要用于连续的空间)
但是假如使用的是链表,那么链表节点他们的内存位置不是排列在一块的,链表节点之间的关系的唯一纽带只有指针,就是p->next指向下一个,
所以p->next与p++不是等价的”
参考链接:
(https://zhidao.baidu.com/question/1576095080104499180.html) (https://blog.csdn.net/dongyanxia1000/article/details/51979931)