给你单链表的头节点 head ,请你反转链表,并返回反转后的链表
leetCode206链接
示例
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
思路分析
- 这类题我的想法是:一定要“聚焦”,就是考虑最少的元素进来,这也是数学归纳法的精髓。这里我们只考虑两个元素,当前元素head和前一个元素prev。我们归纳起来,只要把head.next 指向prev。然后后移head和prev--就可以整个反转链表
- 要考虑链表的的断开,我们把head.next指向prev后,head和后一个元素就断开了。那么我们用一个临时变量next记录住下一个元素
3.最后要考虑结束条件,如果临时指针next是null表示到了结尾,那么head就是新的head。
代码
ListNode reverseList(ListNode head) {
ListNode newHead = null;
ListNode prev = null;
while (head != null){
//处理断开
ListNode next = head.next;
//结尾处理
if(next == null){
newHead = head;
}
// 聚焦----head 指针指向前一个
head.next = prev;
//两个指针后移
prev = head;
head = next;
}
return newHead;
}
、