链表

之前找工作的时候,受益于算法笔记,这次开始复习,也是从这本书入手,打算重新学习算法,因此从最基础的开始,只要我们去一点一点付出,最后一定结果不会差。加油,道虽远,行将就至。
链表有若干个节点组成,每一个节点代表一个元素,且结点在内存中的存储位置通常是不连续的,两个节点通过一个指针从一个节点指向另一个节点。
链表主要元素有两个,值和指针。
新建链表节点
下面展示一些 内联代码片

新建链表节点 初级入门
node* node1=new node;
node* node2=new node;
node* node3=new node;
node1->data=5;
node->next=node2;
node2->data=6;
node2->next=node3;
node3->data=7;
node3->next=NULL;
新建链表节点 for 循环建立
#include<stdio.h>
#include<stdlib.h>
struct node{int data;
node* next;
{;
node* create(int Array[])
{node *p, *per,*head;
head=new node;
head->next=NULL;
per=head;
for(int i=0;i<5;i++)
p=new node;
p->data=Array[i];
p->next=NULL;
pre->next=p;
pre=p;//p 就是我们单独建立的节点,用于连接,PRE 节点永远是当前的节点}
returen head;
}
int main()
{int Array[5]={5,3,6,1,2};
node* L=create(Array);
L=L->next;
while(L!=NULL)
{printf("%d",L->data);
L=L->next;
}
return 0;

链表的头节点是一个完整的正常的节点。末指针是一个NULL;
关于头节点
链表可以分为带头节点和不带头节点,头结点称为head,且数据域不存放任何内容。指针域next指向第一个数据域有内容的节点
解决链表问题,一般用的方法是双指针方法,一个指针在前一个指针在后,
注意
当在一个链表中要删除一个节点的时候,当我们通过遍历的方法找到这个节点的时候,前指针指向后后指针后,记得将找的的指针delete§
静态数组说白了就是一个数组,只不过这个数组中的元素不再是一个数值,而是一个节点。使用的时候,当作数组使用,数组中的元素是一个是data.一个是当前节点的下一个节点的地址;
反转链表

首先分析,链表的最终节点都是NULL,所以一定先有一个PRE节点用作反转节点的尾节点,之所以没有构造新的节点,因为本来就是用三指针的方法解题,如果涉及的指针较多,容易混乱,当前节点就是Phead节点,三指针的含义就是当前是cur,要把它前一个节点记录,以及它后一个节点;
class Solution {public:ListNode* ReverseList(ListNode* pHead) {if(pHead==NULL||pHead->next==NULL)return pHead;ListNode* pre=NULL;while(pHead!=NULL){ListNode *pnext=pHead->next;pHead->next=pre;pre=pHead;pHead=pnext;}return pre;  }
};
递归思想
所谓递归思想,让人望而生畏的原因就是,循环嵌套,层层叠叠,其实让我们生畏的地点往往是敌人薄弱的地方,因为是层层嵌套,因此都是有规律的,递归,第一层递归,第二层递归,第三层递归,,,最后的递归肯定有停止条件,例如NULL,等条件的判断等。所谓递归就是层层循环,跳出第一层递归,游戏就结束了。耐心去分析,层层递归,去建立自己的循环思想

class Solution {public:ListNode* ReverseList(ListNode* pHead) {if(pHead==NULL||pHead->next==NULL)return pHead;ListNode *cc=ReverseList(pHead->next);pHead->next->next=pHead;pHead->next=NULL;return cc;}
};

判断链表中是否有环
使用双指针方法,一个快指针一个慢指针,速度定为2倍,如果两个指针相遇,则有环,这个题中的关键点是判断临界条件,因为是二倍速度,因此需要考虑三节点问题。相当于你一次蹦的二倍速度,就需要考虑其中的节点问题。

class Solution {public:bool hasCycle(ListNode *head) {ListNode * fast=head;ListNode * low=head;while(low!=NULL&&fast->next!=NULL&&fast->next->next!=NULL){fast=fast->next->next;low=low->next;if(fast==low)return true;}return false;}};

《算法笔记》之链表二叉树相关推荐

  1. 算法笔记-经典链表操作案例

    单链表反转 链表中环的检测 两个有序的链表合并 删除链表倒数第 n 个结点 求链表的中间结点 <?php /*** User: lide01* Date: 2018/10/9 14:06* De ...

  2. 算法笔记一 链表的翻转(C++)

    一 两两交换链表的节点 问题具体见Leecode 算法练习24题 1.1问题分析 1.1.1非递归法 对于非递归的方法我们主要分为四个步骤 1.新建一个节点tamp,让这个节点的next指向头节点 2 ...

  3. 算法笔记-判断链表保存的字符串是否是回文

    <?php/*** 单链表节点** Class SingleLinkedListNode** @package Algo_06*/ class SingleLinkedListNode {/** ...

  4. 【算法笔记】反转二叉树

    反转二叉树问题 翻转一棵二叉树. 示例: 输入: 输出: 问题分析 简单来说就是将每个节点的左右孩子互换,也就是遍历每一个节点然后交换它们的左右孩子,这里就可用到二叉树的各种遍历方法,只是将保存节点值 ...

  5. [算法笔记]-环形链表Ⅱ-解题方法

    原题链接:https://leetcode-cn.com/problems/linked-list-cycle-ii/ Given a linked list, return the node whe ...

  6. 《算法笔记》中文版 - 包括数组,链表,树,图,递归,DP,有序表等相关数据结构与算法的讲解及代码实现...

    来源:专知本文为资源,建议阅读5分钟本文为你分享<算法笔记>中文版. https://github.com/Dairongpeng/algorithm-note 目录概览 第一节 复杂度. ...

  7. 数据结构与算法学习笔记-树和二叉树

    声明:本博客仅为本人学习途中做的笔记 采自青岛大学王卓老师的视频教学 主要内容为算法思路,具体代码实现还需修改后才能运行,望各位看官多多包涵,您的点赞与评论是对我最大的肯定! 1.树和二叉树的定义 数 ...

  8. 左程云算法笔记(四)哈希表和有序表的使用、链表

    左程云算法笔记(四) 哈希表的使用 有序表的使用 链表 单链表反转 (LC206) 双向链表反转 打印两个有序链表的公共部分 合并两个有序链表(LC21) 判断一个链表是否为回文结构 (LC234) ...

  9. 算法笔记(胡凡)学习笔记@Kaysen

    本文旨在记录算法笔记学习过程中的收获和一些知识点,部分易错知识点只针对个人而言,CCF-CSP考试冲鸭!!! Chapter 2 C/C++快速入门(易错知识点) 2.1 基本数据类型 变量定义注意区 ...

最新文章

  1. 写了一个将VxWorks的shell打印输出到指定内存中的接口,可广泛用于CLI下的调试函数显示以及故障自动捕获等功能,稍作修改可以适合其它嵌入式OS...
  2. Android控件-GridView
  3. maven netty 配置_SpringBoot整合Netty(附源码)
  4. 【转】使用Eclipse的代码追踪功能
  5. java 查看pdf_Java中实现pdf在线查看和下载
  6. Qt4.7.0添加自定义键盘(转载+部分自己的实际工程实验)
  7. SAP Gateway 类型为multipart mixed的请求处理逻辑
  8. scala中的协变和逆变
  9. python初学入门教程_python初学者怎么入门|python基础教程|python入门|python教程
  10. Introduction to Computer Networking学习笔记(二十):delay guarantees延迟速度保证
  11. 在手机上运行 Python,这款工具比 QPython 还好用~
  12. ubuntu安装deb文件
  13. 使用后处理Alpha通道丢失的问题
  14. 在ZYNQ7000嵌入式操作系统Debian8下源代码编译安装并配置Ros环境(Kinetic版本)
  15. Practical Test Reminders, Character Arrays, C-Strings
  16. android视频采集
  17. 僵尸java7723_僵尸王国7723游戏盒子
  18. 微信公众号最佳实践 ( 7.5 )股票行情及分析
  19. python如何读取uni文件_如何在Python中通过HTTP与UniProt交谈?
  20. java 多线程的三种写法

热门文章

  1. aps.net导出数据库信息到excel后下载
  2. 【Java校招面试】实战算法(五)——分数相加(虎牙)
  3. redis集群搭建及连接(阿里云)
  4. 不要逼脸李笑来,退圈以后再站台
  5. 做视频号直播时,有哪些吸粉技巧呢?
  6. 2005.10丽江,玉龙雪山
  7. 安全智能TF卡读写稳定性测试
  8. 安装校园正版matlab
  9. 求解雅克比矩阵的符号运算
  10. 你现在极有可能是一个「铁锤人」