思路:

1)这道题中需要我们对已有的链表进行翻转,需要知道的一点是翻转链表其实就是翻转.next即可,

2)我们并不需要建立新的链表,不需要浪费新的空间,

3)这就需要我们利用刚学过的双指针法,一个快指针一个慢指针,

4)一位链表的最后一位需要指向null,所以慢指针直接指向null即可 而快指针指向头结点进行遍历即可

5)此时我们在反转next前,应该判断一下链表是否已经翻转完成

6)链表翻转完成时应该就是遍历完成的时候,也就是cur = null的时候,

7)这时候返回pre即可

代码:

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
class Solution {
    public ListNode ReverseList(ListNode head) {
         if(head==null)
             return head;
         ListNode pre=null;
         ListNode cur=head;
         while(cur!=null){
             ListNode temp=cur.next;//暂存下一个节点
             cur.next=pre;//反向
             pre=cur;
             cur=temp;
         }
        return pre;
    }
}