链表
智慧的人不要秃头
放弃不难,但坚持一定很酷!!!
展开
-
判断链表是否成环 --- 力扣142. 环形链表 II
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/li原创 2022-01-20 15:33:40 · 983 阅读 · 0 评论 -
数组与链表
作为线性表的两种存储方式 —— 链表和数组,这对相爱相杀的好基友有着各自的优缺点。数组:数组,所有元素都连续的存储于一段内存中,且每个元素占用的内存大小相同。这使得数组具备了通过下标快速访问数据的能力。但连续存储的缺点也很明显,增加容量,增删元素的成本很高,时间复杂度均为 O(n)。增加数组容量需要先申请一块新的内存,然后复制原有的元素。如果需要的话,可能还要删除原先的内存。删除元素时需要移动被删除元素之后的所有元素以保证所有元素是连续的。增加元素时需要移动指定位置及之后的所有元原创 2022-01-17 20:57:00 · 140 阅读 · 0 评论 -
力扣141. 环形链表
给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。方法一:哈希表class Solution {public:..原创 2022-01-17 18:48:35 · 121 阅读 · 0 评论 -
力扣面试题 02.07. 链表相交
双指针法:class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { //如果给定的两链表其中有一个为空就返回nullptr(也包括都为空的可能) if(headA == nullptr || headB == nullptr){ return nullptr; } /...原创 2022-01-17 15:53:40 · 443 阅读 · 0 评论 -
力扣203. 移除链表元素
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。方法一:迭代/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : .原创 2022-01-11 21:34:25 · 118 阅读 · 0 评论 -
力扣19. 删除链表的倒数第 N 个结点
方法一、计算链表的长度class Solution {public: int getLength(ListNode* head){ int length=0; while(head!=nullptr){ ++length; head=head->next; } return length; } ListNode* removeNthFromEnd(L...原创 2022-01-06 22:30:50 · 593 阅读 · 0 评论 -
力扣160. 相交链表
给你两个单链表的头节点headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构 。自定义评测:评测系统 的输入如下(你设计的程序 不适用 此输入):intersectVal - 相交的起始节点的值。如果不存在相交节点,这一值为 0listA - 第一个链表listB - 第二个链表ski..原创 2021-12-04 00:39:41 · 251 阅读 · 0 评论 -
力扣24. 两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。方法一:迭代class Solution {public: ListNode* swapPairs(ListNode* head) { if(head==nullptr||head->next==nullptr){ return head; } ListNode* node =原创 2021-12-04 00:01:57 · 712 阅读 · 0 评论 -
力扣21. 合并两个有序链表
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。方法一:迭代法/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr...原创 2021-12-03 16:05:41 · 319 阅读 · 0 评论 -
力扣206. 反转链表
给你单链表的头节点head,请你反转链表,并返回反转后的链表。方法一:双指针一次遍历链表,遍历到的每一个节点,让当前节点的下一个节点指向它的上一个节点class Solution {public: ListNode* reverseList(ListNode* head) { if(head==nullptr){ return head; } ListNode* cur=nullptr; ..原创 2021-12-02 23:16:31 · 281 阅读 · 0 评论 -
力扣234. 回文链表
给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。方法一:使用数组Ⅰ.遍历链表,将链表的节点依次放入到vector数组中Ⅱ.这样就将判断链表是否回文的问题,转换成判断数组中的元素是否回文的问题Ⅲ.利用双指针,left指向第一个元素的下标,right指向最后一个元素的下标,依次判断left、right下标处的元素是否相等,如果不相等返回falseclass Solution {public: bool isPa...原创 2021-12-25 20:36:27 · 448 阅读 · 0 评论