2019.04.09打卡

单链表的删除和尾插法创建部分

 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)

猜你喜欢

转载自www.cnblogs.com/smyhhh/p/10680621.html
今日推荐