前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >剑指offer_24_反转链表

剑指offer_24_反转链表

作者头像
用户6055494
发布2019-08-20 15:27:18
2380
发布2019-08-20 15:27:18
举报
文章被收录于专栏:AVAJAVAJ

题目:反转链表

描述:定义一个函数,输入链表的头结点,反转该链表并输出反转后链表的头结点。

方法一:迭代法,记录当前节点的下一个节点,当前节点指向上一个节点,然后记录下当前节点,再让下一个节点变成当前节点。

方法二:递归法,先找到最后一个节点,然后从最后一个开始反转,然后返回最后一个节点。

构建Node

代码语言:javascript
复制
class Node {
    public int value;
    public Node next;

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

方法一迭代

代码语言:javascript
复制
    public Node reverseNode(Node head) {
        if(head == null || head.next ==null) {
            return head;
        }
        Node temp = head.next;
        Node newHead = reserve(head.next);
        // 处理头结点
        temp.next = head;
        head.next = null;
        return newHead;
    }

    private Node reserve(Node node) {
        Node pre = null;
        Node next = null;
        while (node != null) {
            // 记录下当前节点的后续节点
            next = node.next;
            // 当前节点的下一个节点指向前一节点
            node.next = pre;
            // 前一节点变成当前节点
            pre = node;
            // 当前节点的下一个节点变成当前节点
            node = next;
        }
        return pre;
    }

递归法:

代码语言:javascript
复制
    public Node reverse(Node node,Node prev) {
        if (node.next == null) {
            node.next = prev;
            return node;
        } else {
            // 拿到最后的节点,也就是反转后的头结点
            Node rev = reverse(node.next,node);
            node.next = prev;
            return rev;
        }
    }

两种方法供大家参考。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员面试鸭 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档