思路:
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;
}
}