和官方题解思路是一样的,但是细节上的思想不同,但也AC了
关键是三个
1.要将上一个结点存起来
2.要有一个指针指向下一个结点
3.边界问题,要注意什么时候跳出循环
public ListNode reverseList(ListNode head) {
/** 如果该链表为空 或者 为一个结点*/
if (head == null || head.next == null){
return head;
}
/** 定义一个临时结点temp,用来存放上一个结点*/
ListNode temp = null;
/** 两个指针,一个当前 ,一个下一个*/
ListNode curr = head;
ListNode next = head.next;
/** 开始反转,next为空时,结束*/
while (next != null){
curr.next = temp;/** 当前结点.next ——> 上一个结点temp*/
temp = curr;/** 然后temp赋值为当前结点*/
curr = next;/** 两个指针后移*/
next = next.next;
}
/** 将最后一个结点指向上一个结点*/
curr.next = temp;
return curr;
}