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

反转链表

时间:2022-12-20 10:11:18浏览次数:60  
标签:Node head return 反转 next 链表 null public

反转链表

import java.util.Arrays;
import java.util.List;

import org.springframework.util.CollectionUtils;

import com.google.common.collect.Lists;

import lombok.extern.slf4j.Slf4j;

/**
 * 反转链表
 * 
 * @author qhong
 * @date 2022/12/20 09:11
 **/
@Slf4j
public class ReverseLinkedListDemo {
    public static void main(String[] args) {
        Node head = createLinkedNode(Arrays.asList(1, 2, 3, 4, 5, 6));
        printLinkedNode(head);

        printLinkedNode(reverseList(head));
        // printLinkedNode(reverse(head));
    }

    /**
     * 使用遍历的方式
     * 
     * @param node
     * @return
     */
    public static Node reverseList(Node node) {
        Node pre = null;
        Node next = null;
        while (node != null) {
            next = node.next;
            node.next = pre;
            pre = node;
            node = next;
        }
        return pre;
    }

    /**
     * 使用递归的方式
     * 
     * @param head
     * @return
     */
    public static Node reverse(Node head) {
        if (head == null || head.next == null)
            return head;
        Node temp = head.next;
        Node newHead = reverse(head.next);
        temp.next = head;
        head.next = null;
        return newHead;
    }

    static class Node {
        public int value;
        public Node next;

        public Node(int data) {
            this.value = data;
        }
    }

    /**
     * 创建链表,数组转链表
     * 
     * @param list
     * @return
     */
    public static Node createLinkedNode(List<Integer> list) {
        if (CollectionUtils.isEmpty(list)) {
            return null;
        }
        Node head = new Node(list.get(0));
        Node temp = head;
        for (int i = 0; i < list.size() - 1; i++) {
            Node next = new Node(list.get(i + 1));
            temp.next = next;
            temp = next;
        }
        return head;
    }

    /**
     * 打印链表
     * 
     * @param head
     */
    public static void printLinkedNode(Node head) {
        if (head == null) {
            return;
        }
        List<String> arr = Lists.newLinkedList();
        while (true) {
            arr.add(String.valueOf(head.value));
            head = head.next;
            if (head == null) {
                break;
            }
        }
        log.info("linkedNodeList:{}", arr);
    }

}

参考:

如何k个一组反转链表

理解单链表的反转(java实现)

标签:Node,head,return,反转,next,链表,null,public
From: https://www.cnblogs.com/hongdada/p/16993625.html

相关文章

  • 常用数据结构:单向链表和双向链表的实现
    1、链表是什么?链表是编程语言中常见的一种数据结构,它可以实现动态的创建和删除,只要内存足够,链表的数量和长度是可以无限多和无限长的。链表顾名思义是一种链式的数据结构,它......
  • 双链表实现双端队列
    双链表实现双端队列双端队列是一个从两端都可以进行进队出队的队列。代码:/***使用双链表实现双端队列*双端队列也就是在队列的两端都可以进行出队列以及入队列......
  • 链表的反转
    链表的反转单链表的反转关于单链表的反转最重要的是要弄清楚边界问题。我们首先记录以下头节点的下一个节点然后让头节点的下一“指针”next指向前指针pre刚开始为null,......
  • 单链表与队列和栈
    单链表与队列和栈使用单链表实现队列队列是一个先进先出的数据结构,它包括进队、出队、获取队列大小等功能。代码:/***使用单链表实现队列*队列是一个先进先出的......
  • [leetcode]第 2 天 链表(简单)
    06.从尾到头打印链表思路说到从尾到头,很容易想到可以用到栈的方式进行处理,那么问题就转化成了如何用辅助栈完成打印链表。可以从链表的头节点开始,依次将每个节点压入栈......
  • 剑指Offer——链表的环以及环的入口
    在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表1->2->3->3->4->4->5处理后为1->2->5解题思路这个题包含两个子问......
  • 数据结构 玩转数据结构 7-2 基于链表的集合实现
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13704 1重点关注1.1使用链表实现集合Set详见3.1用链表实现的集合  2......
  • [LeetCode]007-整数反转
    >>>传送门题目给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围 [−231, 231 −1],就返回0。假......
  • 从redis源码看数据结构(一)链表
    文章目录​​从redis源码看数据结构(一)链表​​​​一,redis数据类型​​​​二,redis底层列表实现​​​​1.列表底层数据结构​​​​2.redis双向链表操作​​​​新建链表​......
  • 链表与数组的区别
    原文链接:https://baijiahao.baidu.com/s?id=1743478279629141019物理存储结构不同链表与数组在计算机中存储元素采用不同的物理存储结构,数组是顺序存储结构,链表是链式......