链表操作之插入数据
来源:互联网 发布:淘宝客服与买家对话 编辑:程序博客网 时间:2024/06/05 02:42
1.现在来谈一下链表的插入操作
2.源代码
void insertDataTail(Node* &L){int number;printf("请输入需要插入的数据数目:\n");scanf("%d",&number);int i;Node* q;//新建一个Node型指针q Node* r;//用来遍历区间r = L;//注意插入的时候,指针从L开始 while(r->next!=null){//当r不是尾指针的时候 r = r->next;//循环 } for(i = 0;i< number;i++){q = new Node ;//指向一个申请的节点 scanf("%d",&q->data);//输出数据q->number = ++count; //表示结点的序号 r->next = q;//插入 q->next = null;//赋空 r = q; //换值 }}3.代码分析
(1)我们要清楚,在插入和删除操作中,我们均需要知道被操作的那个结点之前的那个结点,只有这样,才能准确无误地完成操作。
(2)要准确理解什么是“在被操作的那个结点之前的那个结点”,比如说,在上述的这个代码中insertDataTail()是实现尾插法插入数据到单链表中。而在这里的“前一结点”的思想的准确体现就是在
(3)链表插入三部曲:插入;赋空;换值。
Node* r;r=L;这里之所以是r=L;而不是r=L->next的原因就是插入(删除)思想的体现。【L指向的是头结点,我们需要的是在头结点之后插入首元结点,紧接着再往后面插入数据……】
4.读者如果理解了这一点之后,可以尝试完成下面这道题
5.将一个带头结点的单链表A分解成两个链表A和B,使得A只含有奇数元素,链表B只含有偶数元素。这里给出源码
//Unit2-10 void seperateTwoLinkList(Node* L,Node* &L1,Node* &L2){//将链表L修改成L1与L2Node* r;r = L;Node* a;Node* b;a = L1;b = L2;while(r->next!=null){//r不动 if((r->next->number)%2==0){//如果为偶数 a->next = r->next;r->next = r->next->next;a->next->next = null;a = a->next; }else{//奇数 b->next = r->next;r->next = r->next->next;b->next->next = null;b = b->next;}}}
(1)插入需要注意的地方就是指针当前的位置,指针的替换等。
(2)注意我们在申请两个Node型指针的时候,不能使用
Node* a,b;
方式来申请,而必须使用
Node* a;Node* b;
或者是语句
Node *a,*b;来申请两个Node*型指针,切记!!
1 0
- 链表操作之插入数据
- 数据上传,下载功能(四)之插入数据QSqlQuery操作
- Kohana数据操作CRUD之插入、更新、删除
- 数据操作之《排序套餐:冒泡、选择、插入、快速、归并》
- 数据操作之《排序套餐:冒泡、选择、插入、快速、归并》
- 链表的基本操作之插入、删除、逆置
- 数据结构之链表操作,创建,插入,删除,查找。
- 数据结构之简单链表(尾部插入数据)
- 数据结构之双向链表,头部插入数据
- 数据结构之简单链表(尾部插入数据)
- 头指针链表插入数据方式之任意位置插入
- Hbase之插入数据
- 链表的插入操作
- 链表插入删除操作
- 链表的插入操作
- 数据结构:单链表(二)之链表节点排序,升序插入数据,删除指定的所有节点,翻转链表操作
- SQL SERVER插入数据操作
- 插入查找数据的操作
- 集合框架
- Day2 test1
- WP 4 i春秋_internetwache-ctf-2016
- FOJ有奖月赛-2017年4月(校赛热身赛) random password(DP)
- kali安装之后的更新命令详解
- 链表操作之插入数据
- Linux-memo
- 剑指offer-面试题 14:调整数组顺序使奇数位于偶数前面
- Java 8
- 题目1086:最小花费
- 未完成, (学习学长的处理年月日的方式)
- jquery事件绑定
- MySQL (7) 索引基础
- 杭电oj(Java版)——1013 Digital Roots