#

反转链表

http://www.nowcoder.com/questionTerminal/75e878df47f24fdc9dc3e400ec6058ca

参考其他人的回答,总结了两种方法

  1. 使用JDK自带的栈,循环链表,将元素全部压入栈中。取出的时候因为栈FILO的特性,自然就反转了。这里需要注意将最后一个元素的next变为空,否则会出现死循环
  2. 使用辅助指针,指向新链表的头,以及旧链表的next
/**
 * 第一种方式:使用栈
 */
    public ListNode ReverseList(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        // 放入栈中
        Stack<ListNode> stack = new Stack<>();
        while (head != null) {
            stack.push(head);
            head = head.next;
        }
        ListNode newHead = stack.pop();
        ListNode cur = newHead;
        while (!stack.isEmpty()) {
            cur.next = stack.pop();
            cur = cur.next;
        }
        cur.next = null;
        return newHead;

    }

/**
 * 第二种方式:使用辅助指针
 */
public ListNode ReverseList(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        // 用指针记录
        ListNode newHead = null;
        ListNode next;
        while (head != null) {
            // 指向下一个node
            next = head.next;
            // 将当前节点脱离远链表,作为新链表的头
            head.next = newHead;
            // 将newHead转为当前节点
            newHead = head;
            // head等于下一个节点
            head = next;
        }
        return newHead;
    }


全部评论

相关推荐

10-15 15:00
潍坊学院 golang
跨考小白:这又不是官方
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
无敌虾孝子:喜欢爸爸还是喜欢妈妈
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务