1. NC78.反转链表
1.1. 题目描述
输入一个链表,反转链表后,输出新链表的表头。 示例1
输入
{1,2,3}
返回值
{3,2,1}
1.2. 解法一:常规解法
public class Solution {
    public ListNode ReverseList(ListNode head) {
        ListNode prev = null;
        ListNode curr = head;
        ListNode temp = null;
        while(curr != null){
            temp = curr.next;
            curr.next = prev;
            prev = curr;
            curr = temp;
        }
        return prev;
    }
}
1.3. 解法二 : 栈
解题思路:因为栈是先进后出的。实现原理就是把链表节点一个个入栈,当全部入栈完之后再一个个出栈,出栈的时候在把出栈的结点串成一个新的链表。原理如下
import java.util.*;
public class Solution {
    public ListNode ReverseList(ListNode head) {
     Deque<ListNode> deque = new LinkedList<>();
     while(head != null){
         deque.offer(head);
         head = head.next;
     } 
     if(deque.isEmpty()){
         return null;
     }  
     ListNode node = deque.pollLast();
     ListNode dummy = node;
     while(!deque.isEmpty()){
         ListNode temp = deque.pollLast();
         node.next = temp;
         node = node.next;
     }  
     node.next = null;
     return dummy;
    }
}