• 2.10

    • 尾插法依旧忘记了返回的是 pre
    • 递归法:终止条件先判断当前是不是空链表,在判断 head。next!=null,找到最后的节点
  • 1.24

    • 两个方法都做了一遍,尾插法返回的是 pre
  • 1.18

    • 绷不住了,想到了递归,递归需要返回新的head 头啊,不用哨兵节点
  • 法 3:递归法(学树学习惯了)

class Solution {
    public ListNode reverseList(ListNode head) {
        
        return reverse(head);
    }
    public ListNode reverse(ListNode node){
        if(node==null||node.next==null) return node;
        ListNode newHead = reverse(node.next);
 
        node.next.next=node;
        node.next=null;
        return newHead;
    }
}
  • 法1:额外数组
class Solution {
    public ListNode reverseList(ListNode head) {
        int temp = 1;
        int i = 0;
        ListNode link= head;
        List<Integer> results = new ArrayList<>();
        while(link!=null){
            temp =  link.val;
            results.add(temp);
            link = link.next;
        }
        Collections.reverse(results);
        ListNode newLink = new ListNode(0);
        link = newLink;
        for(int result:results){
            link.next = new ListNode(result);
            link=link.next;
        }
        return newLink.next;
 
    }
}
  • 法2:当场反转(迭代法?)
 
1(pre)(null)-2(current)-3(temp)
 
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre =null;
        ListNode currt = head;
        while(currt!=null){
            ListNode temp = currt.next;
            // currt= next;先更新链条在迁移节点
            currt.next = pre;
            pre=currt;
            
            currt=temp;
 
        }
        return pre;
}}
 
			ListNode temp = current;
            current.next = pre;
            pre = current;
            current = temp.next;
            //这一版本中,先砍断了curent与后面的节点,保存的是curent本身,后面current = temp.next;时就是pre,而不是真正的current后面的3