提示:以下是本篇文章正文内容,下面案例可供参考
今日主要讨论了
1.存在多种情况下的选择问题
2.以建立链表为例,对于指针的失效的条件的探究
代码如下(示例):
//定义学生的结构体 struct stu{ int number; int score; }; bool cmp (stu a, stu b){ //如果学生的分数不同则按照分数从大到小排列 if(a.score !=b.score){ return a.score>b.score; } //如果学生的分数相同则按照数字的排序从小到大排序 else{ return a.number<b.number; } } bool cmp (stu a,stu b){ //使用三目运算符可以有效地减少代码的规模 return a.score!=b.score ? a.score>b.score : a.number<b.number; }
代码如下(示例):
ListNode* buildlist (){ ListNode*head = NULL; ListNode* next1 = NULL; ListNode* ll1 =NULL; for(int i = 0;i<3;i++){ ll1 = (ListNode*)malloc(sizeof(ListNode)); if(head==NULL){ head = ll1; }else{ //正确版本 <--------------------------------------------------------------------------------------> next1->next = ll1; <--------------------------------------------------------------------------------------> } ll1->next = NULL; cin>>ll1->val; //正确版本 <--------------------------------------------------------------------------------------> next1 = ll1; <--------------------------------------------------------------------------------------> } return head; } ListNode* buildlist (){ ListNode*head = NULL; ListNode* next1 = NULL; ListNode* ll1 =NULL; for(int i = 0;i<3;i++){ ll1 = (ListNode*)malloc(sizeof(ListNode)); if(head==NULL){ head = ll1; }else{ //错误版本 <--------------------------------------------------------------------------------------> next1 = ll1; <--------------------------------------------------------------------------------------> } ll1->next = NULL; cin>>ll1->val; //错误版本 <--------------------------------------------------------------------------------------> next1 = ll1->next; <--------------------------------------------------------------------------------------> } return head; }
以上就是今天要讲的内容,本文仅仅简单介绍了指针失效的一种常见情况,譬如,在每一次循环进行相关的操作(例如:给节点内部的变量赋值的行为)后,如果需要将此节点与上一个完成相关行为(例如:给节点内部的变量赋值的行为)产生逻辑关系的情况(称之为节点连接问题),不能在每次行为结束(循环结束)的末尾记录本次节点的next的结果,而是应该记录本次节点的结果。