首页 > 其他分享 >3620、反转链表

3620、反转链表

时间:2023-02-14 14:35:50浏览次数:37  
标签:Assert head ListNode 3620 next 链表 反转 foot

给你单链表的头节点 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


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


来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/reverse-linked-list

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

package cn.fansunion.leecode.linkedlist;

/**

* 206.反转链表<br/>

* 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。<br/>

* 力扣

*

* @author [email protected]

*

* 2022-2-18

*/

public class ReverseLinkedList {

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

输出:[5,4,3,2,1]

输入:head = [1,2]

输出:[2,1]

示例 3:



输入:head = []

输出:[]*/

public ListNode reverseList(ListNode head) {

if (head == null || head.next == null) {

return head;

}

// 第1个prev,默认为头结点

ListNode prev = head;

ListNode next = head.next;

// 关键点2:头结点的next需要改为null,不然“循环链表543212345”

head.next = null;

// 关键点1:维护一个尾节点

ListNode foot = head;

while (next != null) {

foot = next;

next = next.next;

foot.next = prev;

prev = foot;

}

return foot;

}

}
package test.leecode.linkedlist;

import org.junit.Assert;

import org.junit.Test;

import cn.fansunion.leecode.linkedlist.ListNode;

import cn.fansunion.leecode.linkedlist.ReverseLinkedList;

/**

* @author [email protected]

*

* 2022-2-23

*/

public class ReverseLinkedListTest {

@Test

public void test() {

ReverseLinkedList list = new ReverseLinkedList();

ListNode node5 = new ListNode(5,null);

ListNode node4 = new ListNode(4,node5);

ListNode node3 = new ListNode(3,node4);

ListNode node2 = new ListNode(2,node3);

ListNode head1 = new ListNode(1,node2);

ListNode foot=list.reverseList(head1);

Assert.assertEquals(5, foot.val);

Assert.assertEquals(4, foot.next.val);

Assert.assertEquals(3, foot.next.next.val);

Assert.assertEquals(2, foot.next.next.next.val);

Assert.assertEquals(1, foot.next.next.next.next.val);

Assert.assertNull(foot.next.next.next.next.next);

}

}

标签:Assert,head,ListNode,3620,next,链表,反转,foot
From: https://blog.51cto.com/fansunion/6056783

相关文章

  • 3622、合并两个有序链表
    将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1......
  • 3595、反转两次的数字
    反转一个整数意味着倒置它的所有位。例如,反转2021得到1202。反转12300得到321,不保留前导零。给你一个整数num,反转num得到reversed1,接着反转reversed1得到......
  • 数据结构实验之链表一:顺序建立链表(SDUT 2116)
    ProblemDescription输入N个整数,按照输入的顺序建立单链表存储,并遍历所建立的单链表,输出这些数据。Input第一行输入整数的个数N;第二行依次输入每个整数。Output输出这组整......
  • 数据结构实验之链表二:逆序建立链表(SDUT 2117)
    ​​题目链接​​#include<bits/stdc++.h>usingnamespacestd;structnode{intdata;structnode*next;};intmain(){intn;structnode*head,*p;h......
  • leetcode:合并2个有序链表-easy
    题目:将两个升序链表合并为一个新的升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,......
  • 反转链表
    给你单链表的头节点head,请你反转链表,并返回反转后的链表 输入:head=[1,2,3,4,5]输出:[5,4,3,2,1] tips:链表中节点数的数目范围[0,5000]-5000<=Node.val<......
  • 如何理解spring框架中的依赖注入和控制反转?
     ioc,InversionofControl(控制反转),是Spring中的一种设计思想而非技术。我们可以从4个方面理解ioc:①谁控制谁?——Ioc容器控制对象。②控制了什么?——Ioc容器控......
  • LeetCode-83. 删除排序链表中的重复元素(java)
    一、前言:......
  • 插入有序的单链表(要求插入后元素有序排列)
    问题引入:某校实验室有一批计算机,按其价格从低到高的次序构成了一个单链表存放,链表中每个结点指出同样价格的若干台。现在又增加m台价格为h元的计算机,编程实现实验室计......
  • 两个单向循环链表的合并(带头结点)
    两个单向循环链表的合并(带头结点)问题引入:已知两个带头结点的单向循环链表,LA和LB分别是链表的头指针,LA=(a1,a2…am),LB=(b1,b2,…bm),编写算法,将LA和LB合并成一个单......