【问题】给定单链表的头节点 head
,请反转链表,并返回反转后的链表的头节点。
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
法一:迭代
(1)Python
#Python
class Solution(object):
def reverseList(self, head):
pre = None
while head is not None:
next = head.next
head.next = pre
pre = head
head = next
return pre
class Solution(object):
def reverseList(self, head):
prev, curr = None,head
while curr is not None:
next = curr.next
curr.next = prev
prev = curr
curr = next
return prev
(2)Java
//Java
class Solution {
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null){
ListNode next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
}
方法二:递归
(1)大问题拆成两个子问题)
(2)子问题的求解方式和大问题一样
(3)存在最小子问题
(1)Python
#Python
class Solution(object):
def reverseList(self, head):
#递归终止条件
if head is None or head.next is None:
return head
p = self.reverseList(head.next)
head.next.next = head
head.next = None
return p
(2)Java
//java
class Solution {
public ListNode reverseList(ListNode head) {
// 1. 递归终止条件
if(head == null || head.next == null){
return head;
}
ListNode p = reverseList(head.next);
head.next.next = head;
head.next = null;
return p;
}
}