(含头结点)单链表的节点删除,增加---最易犯错!!!
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了(含头结点)单链表的节点删除,增加---最易犯错!!!,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2420字,纯文字阅读大概需要4分钟。
内容图文
![(含头结点)单链表的节点删除,增加---最易犯错!!!](/upload/InfoBanner/zyjiaocheng/1004/fe64b8eafc9a4d1bb5a71c6d224bfef5.jpg)
单链表增加删除
1.节点插入
题目来源于PTA
本题要求实现带头结点的单链表插入操作,插入成功返回1,否则返回0。 函数接口定义:int insert_link ( LinkList L,int i,ElemType e);L是单链表的头指针,i为插入位置,e是插入的数据元素,插入成功返回1,否则返回0。 裁判测试程序样例:#include <stdio.h>#include <stdlib.h>typedef int ElemType;typedef struct LNode{ ElemType data;struct LNode *next;}LNode,*LinkList;LinkList Create();/* 细节在此不表 */void print( LinkList L);int insert_link ( LinkList L,int i,ElemType e);int main(){int position,insert_data;int flag; LinkList L = Create();scanf("%d",&position);scanf("%d",&insert_data); flag=insert_link(L,position,insert_data);if(flag) {print(L);}else { printf("Wrong Position for Insertion");}return 0;}void print(LinkList L){ LinkList p; p=L->next;while (p){ printf("%d ", p->data); p =p->next;}}/* 请在这里填写答案 */输入格式: 输入数据为三行,第一行是若干正整数,最后以-1表示结尾(-1不算在序列内,不要处理)。所有数据之间用空格分隔。 第二行数据是插入位置,第三行数据是被插入元素值。 输入样例:1 2 3 4 5 6 -12 100输出样例:1 100 2 3 4 5 6
正解
int insert_link ( LinkList L,int i,ElemType e){ int j=0; LinkList head=L; if(i<=0) return 0; [while循环是为了遍历到要插入节点的前一个节点]while(head&&j<i-1){head= head->next;++j;} LinkList temp=(LinkList)malloc(sizeof(LNode)); if(!temp) return 0; //判断head是否为空 if(!head) return 0; temp->data=e; temp->next=head->next; head->next=temp; return 1;}
注意这里判断head是否为空很重要,少了这个条件会显示段错误
因为跳出while循环有两种情况
1,就是当head为空的情况,即遍历到了尾结点,此时head为NULL,然而j还没有到达i-1 这说明是,你要插入的节点在尾结点后面至少两个位置,也就是说,当head都已经为空了,然而j还没有到达要插入节点的前一个位置,所以下面需要单独用if判断head是否为空,如果为空,则插入失败
2 就是j到达i-1,正常退出,此时head不为空,,是正常的插入操作
综上,这里就是要注意一个边界条件的判断,大家平常做题使,一定要注意边界条件的判断,这个很重要,因为到时面试的时候,可是要手撕代码,并且要求考虑到所有的边界情况
2.节点删除
通插入操作类似,也是要注意边界条件的取值,这里的代码与插入不同,边界判断也就有点不同,不过是同样的思想
int j=1;LinkList p=L;LinkList temp;if(i<=0) return 0;while(j<i&&p->next){p=p->next;j++;}if(!(p->next)) return 0;temp=p->next;p->next=temp->next;free(temp);return 1;}
这里要注意的就是
if(!(p->next)) return 0;
这个边界条件,因为我删除操作使用的是while(p->next),所以判断也就是p->next
内容总结
以上是互联网集市为您收集整理的(含头结点)单链表的节点删除,增加---最易犯错!!!全部内容,希望文章能够帮你解决(含头结点)单链表的节点删除,增加---最易犯错!!!所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。