【算法提高——链表练习2】教程文章相关的互联网学习教程文章

算法——5.归并排序.链表排序【代码】

虽然链表的存储结构与数组差异很大,但是排序的方式却很类似。冒泡,选择,插入排序都是使用基本相同的方式排序。而使用归并排序,则可以通过构建队列来非递归地进行归并排序,思路也基本相同。但是对于依赖于数组的索引的希尔排序和快速排序来说,对链表使用这些排序并不是一个好办法。import java.util.*;public class C5_归并排序_链表排序 {public static void main(String args[]){Node forwardList = createFowardList(50);p...

复杂链表的复制(一道算法题)【代码】【图】

这是一道算法题。想写篇blog记录一下这道题的解法。题目是这样的:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)这道题什么意思呢?它的意思就是说,我有一个节点类型,这个节点类型有三个成员,其中一个成员存放值,另外另个成员分别是两个指针,一个...

数据结构与算法:链表——递增排序

今天看书时偶然想到的问题,书上是要求将一个数据插入一个有序链接的线性链表中, 所以我想先进行链表内的数据排序在进行插入数据。 在这里我只写了排序的函数。 函数实现:void Sort(LinkList&list, int &n) {   for (int i = 0; i < n - 1; i++) {     LinkList p = list, q;     q = p->link;     if (p->data > q->data) {       list = q;       p->link = q->link;       list->...

114. 二叉树展开为链表【代码】【图】

难度 medium 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例 1:输入:root = [1,2,5,3,4,null,6] 输出:[1,null,2,null,3,null,4,null,5,null,6] 示例 2: 输入:root = [] 输出:[] 示例 3: 输入:root = [0] 输出:[0] 提示: 树中结点数在范围 [0, 200...

114 二叉树展开成链表【代码】【图】

给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。 题解:使用树的前序遍历。 class Solution {public void flatten(TreeNode root) {List<TreeNode> tree=new ArrayList<TreeNode>();qain(root,tree);for(int i=1;i<tree.size();i++){TreeNode prev=tree.get(i-1);...

链表简单选择排序【代码】

链表如何交换两个元素 链表如何唯一标识两个元素 数组值是用下标不同来标识,且之前的条件是<min已经筛去了=min的元素。 链表是用值的不同来标识,且也已经筛去了=min的元素 struct typedef node {int data;struct node* next; }Listnode;void select_sort(node* head)//选择排序(升序) {Listnode* pre = head;Listnode* p = pre->next;Listnode* bmin = pre, * min, * lmin;//bmin是min前一个节点,lmin是min后一个节点Listnode...

114. 二叉树展开为链表【代码】【图】

114. 二叉树展开为链表 Difficulty: 中等 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 顺序相同。 示例 1:输入:root = [1,2,5,3,4,null,6] 输出:[1,null,2,null,3,null,4,null,5,null,6]示例 2: 输入:root = [] 输出:[]示例 3: 输入:root = [0] 输出:[0]提示: 树中结点数...

leetcode——对链表进行插入排序【代码】

思路: 1.如果链表为空,则返回其本身; 2.如果链表不为空,初始化排序表最后指针lastsorted为head,当前需排序的指针curr为head->next; 3.为了方便将元素插入到head之前,设立Head_front指针,值设为0,指向head; 4.初始化完成后,对排好序的表利用指针prev进行遍历查找,找到适合插入的位置;ListNode *prev = Head_front;while (prev->next->val <= curr->val)prev = prev->next;5.将需排序元素curr原地删除,插入新的位置中;...

2021-03-17:手写代码:单链表插入排序。【代码】【图】

2021-03-17:手写代码:单链表插入排序。 福大大 答案2021-03-17: 从链表的第二个节点开始遍历。当前节点的左边所有节点一定是有序的。先比较当前节点和左邻节点,如果左邻节点小于等于当前节点,直接下个节点;如果左邻节点大于当前节点,从链表的有序部分的第一个节点开始遍历,找到当前节点小于有序部分的某个节点,然后插入进去。 代码用golang编写,代码如下: package mainimport "fmt"func main() {//head := &ListNode{Va...

2021-03-17:手写代码:单链表插入排序。【代码】【图】

2021-03-17:手写代码:单链表插入排序。 福大大 答案2021-03-17: 从链表的第二个节点开始遍历。当前节点的左边所有节点一定是有序的。先比较当前节点和左邻节点,如果左邻节点小于等于当前节点,直接下个节点;如果左邻节点大于当前节点,从链表的有序部分的第一个节点开始遍历,找到当前节点小于有序部分的某个节点,然后插入进去。 代码用golang编写,代码如下: package mainimport "fmt"func main() {//head := &ListNode{Va...

2021-03-16:手写代码:单链表归并排序。【代码】【图】

2021-03-16:手写代码:单链表归并排序。 福大大 答案2021-03-16: 获取链表中点,然后按中点分成两个链表。递归两个链表。合并两个链表。 代码用golang编写,代码如下: package mainimport "fmt"func main() {//head := &ListNode{Val: 4}//head.Next = &ListNode{Val: 2}//head.Next.Next = &ListNode{Val: 1}//head.Next.Next.Next = &ListNode{Val: 3}head := &ListNode{Val: -1}head.Next = &ListNode{Val: 5}head.Next.Next...

2021-03-15:手写代码:单链表选择排序。【代码】【图】

2021-03-15:手写代码:单链表选择排序。 福大大 答案2021-03-15: 遍历链表,找出最小元素,链表里删除最小元素,最小元素放在需要返回的链表里。 代码用golang编写,代码如下: package mainimport "fmt"func main() {//head := &ListNode{Val: 4}//head.Next = &ListNode{Val: 2}//head.Next.Next = &ListNode{Val: 1}//head.Next.Next.Next = &ListNode{Val: 3}head := &ListNode{Val: -1}head.Next = &ListNode{Val: 5}head.N...

2021-03-14:手写代码:单链表冒泡排序。【代码】【图】

2021-03-14:手写代码:单链表冒泡排序。 福大大 答案2021-03-14: 遍历链表,算出元素个数,假设为N。需要嵌套循环,外循环N-1轮,每轮循环相邻交换N-1次。 代码用golang编写,代码如下: package mainimport "fmt"func main() {//head := &ListNode{Val: 4}//head.Next = &ListNode{Val: 2}//head.Next.Next = &ListNode{Val: 1}//head.Next.Next.Next = &ListNode{Val: 3}head := &ListNode{Val: -1}head.Next = &ListNode{Val:...

LeetCode Hot 100 No.114 二叉树展开成链表【代码】【图】

给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例 1: 输入:root = [1,2,5,3,4,null,6] 输出:[1,null,2,null,3,null,4,null,5,null,6] 示例 2: 输入:root = [] 输出:[] 示例 3: 输入:root = [0] 输出:[0] 提示: 树中结点数在范围 [0, 2000] 内 -100...

LeetCode114二叉树展开为链表(递归)【代码】【图】

题目 递归保存当前结点的左右结点,遇到的左结点直接拼到右节点,左节点遍历完之后回溯,找到当前最底层的右结点,再将右节点拼接过去。两个版本 一 有返回值public TreeNode build(TreeNode root){if (root == null) return null;TreeNode left = root.left;TreeNode right = root.right;root.left = null;root.right = build(left);TreeNode tmp = root;while (tmp.right != null) tmp = tmp.right;tmp.right = build(right);re...