5-123
数组中可以随机访问,相反链表就不行
leetcode:206

反转一个链表,链表如果没有特别声明,则节点的值不发生改变


一共需要三个指针:current指向当前需要处理的指针
next指向当前需要处理的元素的下一个元素的指针
pre保存修改之后链表指向的指针

首先实现一个节点的反转

然后将pre、cur、next进行更新(向后移动一个指针
pre更新为cur指针
cur更新为next指针
next由于本身的更新指向下一个元素的位置


然后再重复前面的操作:将cur指向pre指针,然后更新pre、cur、next指针

练习题:leetcode 92

using  namespace std;struct ListNode{int val;ListNode *next;ListNode(int x) :val(x), next(NULL){}
}; ListNode* creatLinkedList(int arr[], int n){if(n==0)return NULL;ListNode* head=new ListNode(arr[0]);ListNode* curNode=head;for(int i=1; i<n; i++){curNode->next=new ListNode(arr[i]);curNode=curNode->next;}return head;
}void printLinkedList(ListNode* head){ListNode* curNode=head;while(curNode != NULL){cout<< curNode->val<<"->";curNode=curNode->next;}cout<<"NULL"<<endl;return;}void deleteLinkedList(ListNode* head){ListNode* curNode=head;while(curNode!=NULL){ListNode* DelNode=curNode;curNode=curNode->next;delete delNode;}return;
}
class Solution{pulic:ListNode* reverseList(ListNode* head){ListNode* pre=NULL;ListNode* cur=head;while(cur != NULL){ListNode* next=cur->next;cur->next=pre;pre=cur;cur=next;}return pre;//pre指向该链表的头结点 }
};int main(){int arr[]={1,2,3,4,5};int n=sizeof(arr)/sizeof(int);//计算出arr数组中的长度 ListNode* head=createLinkedList(arr,n);printLinkedList(head);ListNode* head2=Solution().reverseList(head);printLinkedList(head2);deleteLinkedList(head2);return 0;
}

思考题:leetcode 83

leetcode86

leetcode 328题


设立链表的虚拟头结点


举例:如删除3的元素



该逻辑对删除最后一个元素依然使用,对删除第一个元素不适用。

增加一个虚拟变量


练习题:leetcode 82

leetcode 21

5-4 5 6
leetcode 24





创建几个指针去预先保留要处理的几个节点

思考:可不可以不用next

练习题:leetcode 25

leetcode 147 为一个链表进行插入排序

leetcode 148 SORT LIST
写一个排序算法,用O(n *logn)的时间复杂度为一个链表进行排序

自顶向上,自顶向下


双指针技术
leetcode 19题

优化之后:只遍历一遍链表,p和q之间的距离一定,p之前有多少个点不确定,当q移到NULL时停止。



玩转算法值面试-第五章 -在链表中穿针引线相关推荐

  1. 玩转算法之面试-第六章(栈和队列)

    leetcode 20 此时栈顶的左括号和当前遍历的右括号匹配,故将左括号从栈顶pop出. leetcode 150: leetcode 71 栈和递归的关系 递归算法:二叉树中的算法 .二叉树的前序 ...

  2. 数据结构思维 第五章 双链表

    第五章 双链表 原文:Chapter 5 Doubly-linked list 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 本章回顾了上一个练习的结果,并介绍了List接口的 ...

  3. Visual C++ 2008入门经典 第十五章 在窗口中绘图

    /*第十五章 在窗口中绘图 主要内容: 1 Windows为窗口绘图提供的坐标系统 2 设置环境及其必要性 3 程序如何以及在窗口中绘图 4 如何定义鼠标消息的处理程序 5 如何定义自己的形状类 6 ...

  4. 《Dreamweaver CS6 完全自学教程》笔记 第五章:网页中的图像编辑

    文章目录 第五章:网页中的图像编辑 5.1 图像占位符 5.1.1 插入图像占位符 5.1.2 将图像占位符替换为图像 技术专题:预览网页时不显示图像的问题 5.2 交互式图像 实战:创建网页导航条 ...

  5. 计算机组成原理第五课,计算机组成原理第五章课件(白中英版).ppt

    <计算机组成原理第五章课件(白中英版).ppt>由会员分享,可在线阅读,更多相关<计算机组成原理第五章课件(白中英版).ppt(103页珍藏版)>请在人人文库网上搜索. 1.第 ...

  6. 数据结构例16.试设计一个算法, 使得在一个有序的单链表中插入一个元素后仍然有序。

    /* 16.试设计一个算法, 使得在一个有序的单链表中插入一个元素后仍然有序. */ # include <iostream> # include <stdlib.h> # i ...

  7. 【Java数据结构与算法】第十五章 B树、B+树和B*树

    第十五章 B树.B+树和B*树 文章目录 第十五章 B树.B+树和B*树 一.B树 1.引入 2.介绍 二.B+树 1.引入 2.介绍 三.B*树 1.介绍 一.B树 1.引入 为什么数据库索引要使用 ...

  8. 《算法图解》——第五章 散列表(服务器大姨妈来了?第四第五内容传不上去= =!)

        第五章    散列表 1 散列函数(散列映射.映射.字典.关联数组) 散列函数是这样的函数,即无论你给它什么数据,它都还你一个数字.即散列函数"将输入映射到数字" 散列函数 ...

  9. 玩转算法之面试第九章-动态规划

    动态规划: 9-12 斐波那契数列 对重复计算,进行优化,进行记忆化搜索 假设基本的问题已经被解决,依次内推. 动态规划:将原问题拆解成若干个子问题,同时保存子问题的答案,使得每个子问题只求解一次,最 ...

最新文章

  1. std::ref std::cref
  2. python基础语法有哪些-Python基础语法一
  3. UML建模之时序图(Sequence Diagram)[转]
  4. 浙大 中科大 计算机专业,计算机专业领域的十大牛校,性价比最高的这所往往不为人们所知!...
  5. CF1478A - Nezzar and Colorful Ball(数学)
  6. Oracle常用的几个父栓
  7. Maven配置、使用
  8. ceiling和floor转化
  9. Codeforces Round #350 (Div. 2) B. Game of Robots 水题
  10. TMS320DM8168浮点DSP C674x + ARM Cortex-A8开发板VGA输出接口
  11. pandas datetime数据类型
  12. 基于树莓派的sht20温湿度传感器应用(c语言)
  13. 如何用计算机制作思维导向图,mindmaster使用方法,手把手教你制作思维导图
  14. 2005年度世界500强公司名单[转]
  15. js 对象解构 默认值 重命名
  16. 在c语言中1和0的意思,!1在c语言中是什么意思?
  17. oracle12c rac恢复,oracle 12c rac恢复votedisk碰到问题了(asm)
  18. CSDN日报190318:简单爬虫:给女友定时发送睡前小故事
  19. JSP程序-根据当前时间显示上午好、下午好、晚上好
  20. 俄罗斯立法机关将于下周开始审核加密货币法律草案

热门文章

  1. 推荐Linux内核书籍
  2. Linux kernel 同步机制(下篇)
  3. Android系统架构开篇
  4. 图文|Android 使用Thread 和多线程使用互斥锁
  5. Linux C高级编程——网络编程基础(1)
  6. python print 输出到txt_(Python基础教程之七)Python字符串操作
  7. 图像特征提取与描述_角点特征04:LBP算法+HOG特征算子
  8. 如何写一个包含多个事件四则运算的留存SQL ——impala hive
  9. git 提交文件_git原理与实战
  10. 六、jQuery 中的 AJAX 跨域问题