代码编织梦想

LeetBook——链表——反转链表-爱代码爱编程

反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head = [1,2] 输出:[2,1] 示例 3: 输入:head = [] 输出:[] 提示: 链表中节点的数目范围是 [0,

链表的基本操作#周报-爱代码爱编程

链表的基本操作 在说链表之前,我们先说说顺序存储。其中我们最熟悉的一种顺序存储的数据结构就是数组,当我们想要给数组中插入一个元素时,为保证顺序以及其他元素不丢失,我们需要在插入元素后,将后面的元素整体后移。所以容易看出这样有着这两个弊端:第一:我们所需要移动的元素有很多时,会浪费算力。第二:我们必须为数组开足够多的空间,否则会存在溢出风险。 为了避免这

C语言程序设计(数据结构)——实现单链表的各种基本运算的算法-爱代码爱编程

main.cpp //==========头文件============== #include<stdio.h> #include<stdlib.h> //=========重定义变量类型============ typedef char ElemType; typedef struct LNode { ElemType dat

LeetCode61:旋转链表-爱代码爱编程

一、题目描述     给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出: 4->5->1->2->3->NULL 解释: 向右旋转 1 步: 5->1->2->3

LootCode21: 合并两个有序链表-爱代码爱编程

一、题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 二、解题思路 先判断有无空链表 if(l1==nullptr) return l2; i

建立循环双链表(尾插法)-爱代码爱编程

该方法是将节点插入在当前循环双链表的表尾上,为此增加一个尾指针r ,并始终指向当前链表的尾节点,最后让r->next 指向头结点。头结点的prior 指向尾节点。 注意:这里头结点,尾节点 要相互指向 才是循环双链表 双链表的存储结构: typedef strcut DLinkList{ int data; D

876. 链表的中间结点-爱代码爱编程

使用快慢指针解法,起初快慢指针都指向head,慢指针每次循环走一步,快指针每次循环走两步,当块指针走完整个链表时,慢支针刚好走到链表的中间位置。 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode ne

LeetCode203:移除链表元素-爱代码爱编程

一、题目描述     删除链表中等于给定值 val 的所有节点。 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5 /** * Definition for singly-linked list. * struct List

LeetCode206:反转链表-爱代码爱编程

一、题目描述     反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶:     你可以迭代或递归地反转链表。 /** * Definition for singly-linked list. * str

剑指 Offer 18. 删除链表的节点——变一个头结点出来-爱代码爱编程

原题链接 题目描述 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。 返回删除后的链表的头节点。 注意:此题对比原题有改动 示例 1 输入: head = [4,5,1,9], val = 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -&

单链表环相关问题-爱代码爱编程

1、判断是否有环 https://leetcode-cn.com/problems/linked-list-cycle/ 思路,快慢指针,快指针先于慢指针入环,然后相遇 public boolean hasCycle(ListNode head) { ListNode fast,slow; fast = slow =

LeetCode-061-旋转链表-爱代码爱编程

给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出: 4->5->1->2->3->NULL 解释: 向右旋转 1 步: 5->1->2->3->4->N

建立循环单链表(尾插法)-爱代码爱编程

循环链表的操作实现算法与非循环链表的操作算法基本相同,只是对表尾的判断做了改变。 定义单链表的存储结构: typedef struct LinkList{ int data; LinkList * next; } 思路;(尾插法,定义尾指针) 1.建立头结点L.并置为空的循环单链表 ,并定义一个尾指针 2.

建立循环单链表(头插法)-爱代码爱编程

循环链表的操作实现算法与非循环链表的操作算法基本相同,只是对表尾的判断做了改变。 定义单链表的存储结构: typedef struct LinkList{ int data; LinkList * next; } 思路; 1.建立头结点L.并置为空的循环单链表 2.通过for循环,生成新节点,链接到头结点之后

求助:单链表合并指针问题-爱代码爱编程

求助:单链表合并指针问题 首先做一个试验 #include<iostream> using namespace std; template<class T> struct LinkNode { T data; LinkNode<T>* link; LinkNode(LinkNode<T>* ptr

C语言程序设计(数据结构)——尾插法-爱代码爱编程

尾插法 一开始头指针和尾指针都指向头结点,然后往里边插入元素, 每插入一个元素尾指针就后移一下,现在我们的尾指针就指向我们链表中最后一个结点了 现在我们开始插入一个新的节点,怎么做呢? 我们需要从内存找到一块相应的空间,然后将这个空间的地址存储在,指针变量p当中,这个情况,就称作p指向我们的元素的新节点 然后我们将新节点的数据域插入我们想要插入的元素,然后

C语言实现 无序单链表去重-爱代码爱编程

前言 对于无序单链表去重,目前我有两种思路 两层while,主节点和其他节点挨个比对,遍历时,保存前驱其他节点,碰到相同的删除就可以了,时间复杂度是O(n2)设置flag数组打表,遍历链表且保存前驱,如果第一次碰到该元素,则标记为1,如果再次碰到这个元素则删除就可以,时间复杂度是O(n),缺点就是打表的缺点,无法顾及到所有的数,当数很大时,空间开销大。

习题11-7 奇数值结点链表 (20分)-爱代码爱编程

标题 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 标题 函数接口定义: struct ListNode *readlist(); struct ListNode *getodd( stru

习题11-8 单链表结点删除 (20分)-爱代码爱编程

标题 本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中所有存储了某给定值的结点删除。链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *deletem( struct Lis

LeetCode-环形链表 -题号141-Java实现-爱代码爱编程

1、题目链接 环形链表 2、题目大意 题目大意非常简洁明了,给你一个链表的头结点,问你这个链表中是否有环 3、样例输入 head = [3,2,0,-4], pos = 1 注:pos在实际输入中是没有的,这里只是为了标识这个链表是否有环,pos=-1表示没有环,pos≠-1表示最后一个节点的下一个节点下标,比如本样例输入,-4的下一个节点