首页 > 其他分享 >leetcode.206.反转链表

leetcode.206.反转链表

时间:2024-04-05 23:29:18浏览次数:26  
标签:pre head leetcode.206 curr 反转 return 链表 ListNode null

题目

题意:反转一个单链表。

示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL

思路

  • 双指针:创建指针p,curr,初始分别指向null和头节点,每轮循环移动一个节点的指向,直到指到最后一个位置为止。
    请添加图片描述
  • 递归法:基于双指针。注意递归的退出条件

实现

  • 双指针
class Solution {
    public ListNode reverseList(ListNode head) {
             
        ListNode p = null;
        ListNode curr = head;

    //注意这里退出循环得条件,因为curr是在指针翻转之后才赋
    //值,所以最后当curr为null得时候其实已经全部翻转完成了
        while(curr != null){
            ListNode temp = curr.next;
            curr.next = p;

            p = curr;
            curr = temp;
        }
    return p;  
    }
}
  • 递归法
class Solution {
    public ListNode reverseList(ListNode head) {
            
      ListNode pre = null;
      ListNode curr = head;      
      return  reverse(pre,curr);
         
    }

    public ListNode reverse(ListNode pre,ListNode curr){
          
          //递归退出条件
          if(curr == null) {
              return pre;
          } else{
             ListNode temp = curr.next;
             curr.next = pre;
             //注意这里也需要return的
             return  reverse(curr,temp); 
          }
          
        
    }
}

标签:pre,head,leetcode.206,curr,反转,return,链表,ListNode,null
From: https://blog.csdn.net/Nanki_/article/details/137411859

相关文章

  • leetcode.面试题 02.07. 链表相交
    题目给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回null。图示两个链表在节点c1开始相交:思路假a在链表A上移动,b在链表B上移动,a移动完在B上开始,b移动完再A上开始。最终a移动的距离a+c+x,b移动的距......
  • Day1数组+链表
    数组while(不变量)--不变量循环704.二分查找https://leetcode.cn/problems/binary-search/题目要求数组升序无重复数字方法一-左闭右闭[]左闭右闭区间[left,right],若nums[middle]!=target,则边界一定不包含middle;用while循环,当找到了则直接返回,若没有则在while循......
  • C++链表小册子
    目录1.简记2.多说两句3.算法题1.简记对于C++链表类的创建,有以下简记:堆分配,new作为右值。返回指针。对象生命周期手动管理,需要显式删除(delete)ListNodedummy(0);栈分配,返回ListNode。仅在作用域内生效(和常见的初始化int一样)。要得到ListNode指针需要&取地址2.多说两句......
  • LeetCode-142. 环形链表 II【哈希表 链表 双指针】
    LeetCode-142.环形链表II【哈希表链表双指针】题目描述:解题思路一:快慢指针判断是否有环见解题思路二:set()解题思路三:0题目描述:给定一个链表的头节点head,返回链表开始入环的第一个节点。如果链表无环,则返回null。如果链表中有某个节点,可以通过连续跟踪next......
  • 链表
    链表链表结构定义//链表结构定义typedefstructLNode{intdata;structLNode*next;}LNode,*LinkList;初始化链表//初始化链表boolInitList(LinkList&L){L=newLNode;L->next=nullptr;returntrue;}创建链表(头插法)//创建链......
  • 多种方法从尾部移除指定位置的链表节点
    连绵的春雨把人困在家乡,于是我继续开始刷着算法题,通过19.Remove年thNodeFromEndofList复习了一波链表的操作,这道题也是比较典型的链表问题,值得分享一下。题目如下所示:Giventheheadofalinkedlist,removethenthnodefromtheendofthelistandreturnitsh......
  • 数据结构——从入门到飞升——两个有序链表的交集
    题目:已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。输出格式:在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有......
  • Java | Leetcode Java题解之第7题整数反转
    题目:题解:classSolution{publicintreverse(intx){intrev=0;while(x!=0){if(rev<Integer.MIN_VALUE/10||rev>Integer.MAX_VALUE/10){return0;}intdigit=x......
  • 数据结构——从入门到飞升——两个有序链表的合并
    首先,我们要知道sort()函数的使用方法:1.需要函数头#include2.sort(begin,end,cmp)begin:指向待分类元素的第一个指针end:指向待分类元素最后一个的指针其中end-begin是所有数的数量cmp:表示排序的样式,没有就是默认从小到大排要是想从大到小排,可写成greater,int也可以写成别的......
  • 数据结构与算法分析实验3 [进阶]通过链表实现多项式加法和乘法
    文章目录大致内容介绍多项式加法代码一览头文件Poly.h内容如下:实现文件Poly.cpp内容如下:初始化增加元素删除元素功能函数遍历函数清除销毁打印多项式向多项式内插入一个元素源文件main.cpp内容如下:实现效果:多项式乘法实现方法:在Poly.h中添加声明:在Poly.cpp中添加实现:在......