链表反转的两种思路及算法

article/2025/9/23 12:07:24

这样的思路用代码实现主要是有四行(具体内容懒得写了,作为一只摸鱼王),核心四行在就可

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

//做一个自定义函数,如link *turnlink,加一个for循环,进行如下四行
lm->next=lm->next->next;
lr->next=fh->next;
fh->next=lr;
lr=lm->next;//如果你要实现这个,先搞个链表是基本
link *CreatLink(){link*p=(link*)malloc(sizeof(link));link *temp=p;int i;for(i=0;i<5;i++){link *a=(link*)malloc(sizeof(link));a->data=i;a->next=NULL;temp->next=a;temp=temp->next;	}	
} //还有开头定义结构体,虽然我喜欢用#ifndef和#endif搞个项目文件,看起来很舒服的那种
typedef struct node{int data;struct node  *next;
}link;//然后自定义一个函数,再外部放一个for循环,把四行代码放进去,大概循环几次,就可以反转完毕

```java
//放上学长的java代码块
public ListNode reverseList(ListNode head) {if(head == null) {return null;}ListNode fakeHead = new ListNode(0);fakeHead.next = head;ListNode lr = head.next;while ( head.next != null ) {head.next = head.next.next;lr.next = fakeHead.next;fakeHead.next = lr;lr = head.next;}return fakeHead.next;}

感谢宇彬学长大佬的思路提供,感觉超棒!超清晰的思路;

至此,我还有一个方法希望大家可以批评指正

核心在于,我们申请一个新的结点,并为其申请内存
然后再0,1,2,3,4的情况下
如下图(画图有点简陋,没有ipad…)
在这里插入图片描述

如图,先让新结点与2相等,然后让1(假设为lm)指向3,也就是lm->next->next,free掉我们需要替换掉的那个结点
okey
然后让新的新的结点(假设为p)指向head(即fh)的next,然后让fh的next指向p
链接起来,okey

(但在算法分析上,这个方法的时间复杂度可能比较让人难爱)

这就是链表,两种新的思路。(其实还有第三种,大概思路是上两种的综合,就不做概论了)
感谢学长!!!!!!!

(ps:画图是自己画的,比较粗糙,第一次发blog,有点简陋,求包涵)
(题来源于leetcode206)


http://chatgpt.dhexx.cn/article/G6eIdfqF.shtml

相关文章

图解链表反转

转自&#xff1a;http://blog.csdn.net/feliciafay/article/details/6841115 如何把一个单链表进行反转&#xff1f; 方法1&#xff1a;将单链表储存为数组&#xff0c;然后按照数组的索引逆序进行反转。 方法2&#xff1a;使用3个指针遍历单链表&#xff0c;逐个链接点进行反转…

java链表的反转

链表的反转思想其实就是交换&#xff0c;定义两个游标分别为left和right&#xff0c; right指向链表头指针的下一个目的是当反转链表时断开链表时可以找到下一个链表的头&#xff0c;left指向链表头指针的前一个目的是反转链表时可以找到要反转的那个一个节点。 说一下顺序&…

单向链表反转(含图解)

前言 上次讲解了单向链表的原理《Java实现单向链表功能》&#xff0c;今天拓展一下实现链表的翻转。 下面直接上代码。 链表初始化 public class LinkedArray<T extends Number>{//链表的头节点private Entry<T> head;//节点实体类static final class Entry<T&…

链表(反转链表)

反转链表 文章目录 反转链表总结 反转链表 描述 给定一个单链表的头结点pHead(该头节点是有值的&#xff0c;比如在下图&#xff0c;它的val是1)&#xff0c;长度为n&#xff0c;反转该链表后&#xff0c;返回新链表的表头。 数据范围&#xff1a; 0\leq n\leq10000≤n≤1000…

链表反转详解图解

在实现反转之前&#xff0c;先回顾链表操作的一些重点。 现链表节点是以下形式&#xff1a; struct Node {int data;Node* next; }; 解决链表问题一定要理解深刻&#xff0c;一些要注意的点&#xff1a; 链表中每一个节点都是物理内存中实际存在的&#xff0c;物理节点本身…

Java链表-链表反转

基本思想 定义两个空指针&#xff08;pre和next&#xff09;&#xff0c;如果头指针指的值不为空&#xff0c;就让next存头节点的下一个节点的值&#xff08;head.next&#xff09;&#xff0c;再把pre指针的值赋到head.next&#xff0c;再把头节点的值赋到pre&#xff0c;再把…

算法基础——链表反转

一、单链表反转 &#xff08;1&#xff09;创建单链表结构类 public class Node {public int value;//当前节点的值public Node next;//next储存下一个节点地址值public Node(int value) {this.valuevalue;} } 不知道有没有小伙伴像我一样的疑惑&#xff0c;为什么单链表结构…

链表反转(C++)

思路图 这是在刷 LeetCode 看到的一个方法&#xff0c;我觉得特别简单好记&#xff0c;不管单链表还是双链表上来p1、p2、p3 直接反转。 代码实现 单链表反转 struct ListNode {int val;ListNode *next;ListNode() : val(0), next(nullptr) {}ListNode(int x) : val(x), n…

详解:链表反转

链表反转是链表算法题中较为基础的一道题&#xff0c;但对于初学者来说&#xff0c;由于对链表的结构不是很熟悉&#xff0c;一时间无从下手&#xff0c;甚至看别的的阶梯代码都会觉得很晕&#xff0c;看不懂一堆变量都是做什么的。我将会详细描述链表反转的操作&#xff0c;希…

链表反转【递归法】

目录 前言一、解题思路1.找到链表的尾部两个数据&#xff08;4、5&#xff09;2.创建逆向指针3.断开正向指针4.递归5.递归的具体过程向前移动&#xff1a;第一次&#xff1a;创建逆向指针&#xff1a;断开正向指针&#xff1a; 第二次&#xff1a;创建逆向指针&#xff1a;断开…

【C++】3.数据结构与算法:链表反转

链表反转是C面试经常会考的一道题目&#xff0c;下面介绍2种解法&#xff0c;分别是非递归法和递归法。 理论 1.非递归法&#xff08;迭代反转&#xff09; 创建3个指针pre cur nex&#xff0c;每个循环指针各向后移动一个节点。 2.递归法 通过不断压栈&#xff0c;然后退栈…

C语言实现链表反转(上)

链表反转是非常经典的题目&#xff0c;这里让我们用C语言来实现一下链表的反转 这里以无头不循环单向链表为例子&#xff08;因为这是链表中用的比较多的链表结构&#xff09; 这里首先我们先定义一个链表结构 方法一&#xff1a;用三个指针来实现指针的反转&#xff1a; 1.…

Java实现链表反转的两种思路

Java实现链表反转的两种思路 题目迭代递归 题目 将单链表的连接顺序反转过来 输入:1->2->3->4->5 输出:5->4->3->2->1 迭代 迭代&#xff0c;即遍历整个链表的节点&#xff0c;在每个节点上进行操作。每个节点之间都需要进行三个步骤&#xff1a;1.保…

Java之链表的反转

反转API设计&#xff1a; public void reverse():对整个链表反转 public Node reverse(Node curr):反转链表中的某个结点&#xff0c;并把反转后的curr结点返回 使用递归可以完成反转&#xff0c;递归反转其实就是从原链表的第一个存数据的结点开始&#xff0c;依次递归调用反转…

Golang 实现【链表反转】

题目 Golang 实现【链表反转】 如何反转一个单链表。 题目示例 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 链表结构 type ListNode struct {Val intNext *ListNode }第一种实现 解题思路&#xff1a; 利用指针交互的思路 复杂度…

链表反转

转载&#xff1a;https://blog.csdn.net/fx677588/article/details/72357389 因本人日常是java开发&#xff0c;所以翻译成java语言代码&#xff0c;略有改动 链表的翻转是程序员面试中出现频度最高的问题之一&#xff0c;常见的解决方法分为递归和迭代两种。最近在复习的时候…

使用递归实现链表反转

链表反转&#xff08;图解&#xff09; 文章目录 链表反转&#xff08;图解&#xff09;前言一、链表反转二、递归思想三、具体实现1.反转方法API2.具体实现代码3.方法测试 四、方法调用过程总结 前言 链表反转是面试中的一个高频题目&#xff0c;可以通过多种方法实现&#x…

单向链表的反转(c++实现)

目录 前言单向链表的反转实现代码 总结更新 前言 本篇文章接着前文单链表的插入、删除&#xff08;c实现&#xff09;实现链表的反转&#xff0c;主要也即是在前文的基础上完成了一个InvertList()函数。 单向链表的反转 通过前面两篇文章的学习&#xff0c;已经对于链表的操…

C语言 单链表的反转

C语言 单链表的反转 一、简述 记--简单的将单链表的数据顺序进行反转。如将原来的顺序1 2 3 4 5 6 7 反转为&#xff1a;7 6 5 4 3 2 1 二、方式1&#xff1a;头插法 2.1 头插法1--类似新建链表 2.1.1 思路&#xff1a;断开链表头&#xff0c;然后以头插法的方式将原链表的数…

详解反转链表

LeetCode链接 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 情况一&#xff1a;头结点为空 情况二&#xff1a;链表只有一个节点 情况三&#xff1a;链表多于1个节点。 思路&#xff1a;让当前节点指向前一个节点。 如何才能做到当前…