• 这种链表题一定要画图

  • 头插法

  • 遍历原链表+每次插入到新表最前面

    206. 反转链表

    难度简单

    给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

    示例 1:

    img

    1
    2
    
    输入:head = [1,2,3,4,5]
    输出:[5,4,3,2,1]
    

    示例 2:

    img

    1
    2
    
    输入:head = [1,2]
    输出:[2,1]
    

    示例 3:

    1
    2
    
    输入:head = []
    输出:[]
    

    提示:

    • 链表中节点的数目范围是 [0, 5000]
    • -5000 <= Node.val <= 5000
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package Test;
class ListNode {
      int val;
      ListNode next;
      ListNode() {}
      ListNode(int val) { this.val = val; }
      ListNode(int val, ListNode next) { this.val = val; this.next = next; }
  }5t

class Test {
    public static ListNode reverseList(ListNode head){
        ListNode first= new ListNode();
        ListNode copy;

        if(head!=null){
            first.val=head.val;
            copy=head.next;
        }else return head;
       while (copy!=null){
           ListNode temp= new ListNode();
           temp.val=copy.val;
           temp.next=first;
          copy=copy.next;
          first=temp;//每次first指针前移,让他始终指向第一个元素
       }
        return first;
    }
    public static void main(String[] args) {
        ListNode a=new ListNode(5);
        a.next=new ListNode(4);
        a.next.next=new ListNode(3);
        ListNode b=reverseList(a);
        while(b!=null){
            System.out.println(b.val);
            b=b.next;
        }
    }
}