反转链表(java)

方法一: 使用栈,出栈的时候一次指向下一个栈顶的节点

/*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) {
        if(head == null)
        {
            return null;
        }
          Stack stack = new Stack();
          ListNode node = head;
          ListNode result ;
        while(node.next != null)
        {        
            stack.push(node);
            node = node.next;
        }
        result = node;       
        while(!stack.empty())
        {
            node.next =(ListNode) stack.peek();
            node = (ListNode)stack.pop();            
        }
        node.next = null;
        return result;
    }

}

方法二: 遍历链表,保存后一个节点,将后一个节点指向前一个节点

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


猜你喜欢

转载自blog.csdn.net/sue12347/article/details/80181330