链表反转

// 链表反转1

public class ListNode {
    int val;
    ListNode next = null;
    
    ListNode(int val) {
        this.val = val;
    }
}

public class Solution {
    public ListNode ReverseList(ListNode head) {
        if (head == null) {
            return null;
        }
        ListNode second = head.next;
        head.next = null;
        ListNode three = null;
        while (second != null) {
            three = second.next;
            second.next = head;
            head = second;
            second = three;
        }
        return head;
    }
}





链表反转2
/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/

import java.util.Stack;

public class Solution {
    public ListNode ReverseList(ListNode head) {
        Stack<ListNode> stack = new Stack<>();
    
    // 把链表节点全部摘放到栈中
    while (head != null) {
        stack.push(head);
        head = head.next;
    }
    if (stack.isEmpty()) {
        return null;
    }
    ListNode node = stack.pop();
    ListNode dummy = node;
    
    // 栈中的节点全部出栈,然后重新连成一个新的链表
    while (!stack.isEmpty()) {
        ListNode tempNode = stack.pop();
        node.next = tempNode;
        node = node.next;
    }
    // 最后一个节点就是反转前的头节点
    // 一定要让他的next为空,否则会构成环
    node.next = null;
    return dummy;
    }
}
posted @ 2021-07-15 17:36  只会CrtlCV咋办  阅读(38)  评论(0)    收藏  举报