反转单向和双向链表

【题目】 分别实现反转单向链表和反转双向链表的函数。 

【要求】 如果链表长度为 N,时间复杂度要求为 O(N),额外空间复杂度要求为 O(1)。

public class ReverseList {

    class Node {
        private int value;
        private Node next;

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

    class DoubleNode {
        private int value;
        private DoubleNode next;
        private DoubleNode last;

        public DoubleNode(int value) {
            this.value = value;
        }
    }

    /**
     * 反转单链表
     * @param head
     * @return
     */
    public Node reverseList(Node head) {
        // pre代指当前节点的前一个节点
        Node pre = null;
        // next代指当前节点的后一个节点
        Node next = null;
        // cur代指当前节点
        Node cur = head;

        // 当前节点不为空
        while (cur != null) {
            // next指向当前节点的后一个节点
            next = cur.next;

            // 当前节点反转指针,把指针指向前一个节点
            cur.next = pre;

            // 反转后pre当前节点前一个节点向后移
            pre = cur;
            // cur当前节点向后移
            cur = next;
        }

        // 循环走完之后,cur指向空,pre指向了反转后的头节点
        return pre;
    }

    /**
     * 反转双向链表
     * @param head
     * @return
     */
    public DoubleNode reverseList(DoubleNode head) {
        // pre代指当前节点的前一个节点
        DoubleNode pre = null;
        // next代指当前节点的后一个节点
        DoubleNode next = null;
        // cur指向当前节点
        DoubleNode cur = head;

        while (cur != null) {
            // 使next 指向当前节点的后一个节点
            next = cur.next;

            // 反转节点指向
            // 当前节点的next指针指向当前节点的前一个节点
            cur.next = pre;
            // 当前节点的last指针指向当前节点的后一个节点
            cur.last = next;

            pre = cur;
            cur = next;
        }
        return pre;
    }
    
}

#链表#
数据结构与算法 文章被收录于专栏

笔者学习数据结构与算法的心得与经验。

全部评论

相关推荐

黑皮白袜臭脚体育生:可以看看我的开源仿b站前后端分离微服务项目,技术栈相当先进,符合企业校招需求,具体为springboot security, nacos,openfeign,gateway,redis,elasticsearch,rocketmq,minio,mybatis-plus,mybatis-plus-join,druid,jwt,swagger,gson,hutool,websocket,讯飞星火api,jave,xxl-job,zipkin,slueth,可快速下载所有用到的中间件和远程连接中间件软件而不用麻烦的去官网找包以及只需小改存放路径就可缓存前端静态资源的nginx和前端dist包,无需会任何前端极速实现本机运行前端,所有文档教程只在牛客,有各中间件启动教程,有配套简历写法速成简历,github已经330star
点赞 评论 收藏
分享
尊嘟假嘟点击就送:加v细说,问题很大
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务