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

206. 反转链表

时间:2024-06-03 09:56:51浏览次数:13  
标签:head ListNode cur 206 反转 next 链表 last first

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

 

示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

 

提示:

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000

 

进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

 

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        if(head == null || head.next == null) return head;
        ListNode first = head;
        ListNode cur = head.next;
        ListNode last = head.next.next;
        while(first != null){
            cur.next=last;
            if(last == head){
                last.next=null;
            }
            last=cur;
            cur=first;
            first=first.next;
        }
        cur.next=last;
        if(last == head){
            last.next=null;
        }
        return cur;
    }
}

 注意处理链表的head节点,如果不在最后再验证一下if last == head这个情况,就会出现环路, 合并下这两种情况

class Solution {
    public ListNode reverseList(ListNode head) {
        if(head == null || head.next == null) return head;
        ListNode first = head;
        ListNode cur = head.next;
        ListNode last = head.next.next;
        while(first != null){
            cur.next=last;
            last=cur;
            cur=first;
            first=first.next;
        }
        cur.next=last;
        head.next=null;
        return cur;
    }
}

 

 

标签:head,ListNode,cur,206,反转,next,链表,last,first
From: https://www.cnblogs.com/ak918xp/p/18228180

相关文章

  • 数据结构-单链表操作及代码实现(C语言)
    (一)单链表与线性表支持随机访问的特点相比,单链表的特点是适合插入与删除。结构体定义typedefintElementType;//数据元素类型定义typedefstructLNode//单链表结构体定义{ElementTypedata;//数据域structLNode*next;//存储下一个结点的地址}LNode,*L......
  • 【C语言项目实战】使用单链表实现通讯录
                                                                  ......
  • 02-2.3.1 单链表的定义
    ⚠️这两天实在过于忙碌,以至于没有学习的时间,今天闲下来,立刻恢复更新,有等待我最新文章的小伙伴实在抱歉!⚠️另外,有喜欢我笔记的小伙伴可以订阅我的《数据结构》专栏,该专栏收录在我的大专栏《cs-self-learning》中,也可以订阅,日后会有更多有用的技能、笔记全部收录在大专栏里......
  • 【数据结构】单链表-->详细讲解,后赋源码
    欢迎来到我的Blog,点击关注哦......
  • 141. 环形链表
    141.环形链表 简单 相关标签相关企业 给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索......
  • 合并两个有序递增链表
    题目如下: 代码如下:1#include<stdio.h>2#include<stdlib.h>34typedefstructListNode{5intval;6structListNode*next;7}ListNode_t;89structListNode*Merge(structListNode*pHead1,structListNode*pHead2)10{......
  • 反转21克msvcr100.dll丢失怎么办?反转21克msvcr100.dll丢失问题的全面解析与解决之道
    《反转21克》是目前第一款以科幻为题材的互动影像作品。然而很多玩家都遇到了反转21克msvcr100.dll丢失的问题,其中msvcr100.dll是MicrosoftVisualC++2010RedistributablePackage的一部分,它提供了运行时库支持,下面一起来看看解决方法介绍吧!重新安装相关程序重新安装与ms......
  • 8.整数反转
    给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围[−231,231−1],就返回0。假设环境不允许存储64位整数(有符号或无符号)。示例1:输入:x=123输出:321示例2:输入:x=-123输出:-321示例3:输入:x=120......
  • 单链表实现通讯录
    之前我们完成了基于顺序表(动态)实现通讯录,现在我们链表学完了,可以尝试着使用链表来实现我们的通讯录。首先我们要明白我们写的通讯录是由一个个节点组成的,每个节点里存储的就是我们的联系人信息。也就是说我们需要先写一个单链表,完成单链表的插入,删除等功能。然后在单链表......
  • 删除链表倒数第n个节点
    leetcode:19题。思路:定义快慢指针,让快指针先走n步,如何同时移动快慢指针,当快指针走到尾时,慢指针刚好是倒数第n个元素(的前一个)。例:删除倒数第二个节点。n=2;slowfast↓↓a->b->c->d->e->null/***Definitionforsingly-linkedlist.*publiccl......