206.反转链表
给你单链表的头节点
head
,请你反转链表,并返回反转后的链表。
迭代
图解:
class Solution {
public ListNode reverseList(ListNode head) {
ListNode cur = head;
ListNode prev = null;
while(cur != null){
ListNode curNext = cur.next;
cur.next = prev;
prev = cur;
cur = curNext;
}
return prev;
}
}
递归:
思路:就是将问题抛给子问题解决,注意结束条件(找翻转后的头结点)
1.先让n-1个结点翻转并返回头结点;
2.翻转后head为尾结点,head.next为翻转后的最后一个结点,将其链接起来
3.将尾结点的next置空
4.返回头结点
class Solution {
public ListNode reverseList(ListNode head) {
//为头结点返回
if(head == null || head.next == null){
return head;
}
//将剩下n-1个结点反转
ListNode newHead = reverseList(head.next);
//翻转后head为尾结点,但head.next为翻转后的最后一个结点
head.next.next = head;
//将尾结点的next置空
head.next = null;
//返回翻转后的头结点
return newHead;
}
}
最难不过坚持!