Day 10
题目:反转链表
leetcode链接:反转链表
要点:迭代(双指针) 或者递归
一、迭代(双指针)
1、Java
class Solution {
public ListNode reverseList(ListNode head) {
// 迭代
ListNode pre = null;
ListNode curr = head;
while(curr != null){
ListNode temp =curr.next;
curr.next = pre;
pre = curr;
curr = temp;
}
return pre;
}
}
2、python
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
# 迭代
pre = None
curr = head
while curr != None:
temp = curr.next
curr.next = pre
pre = curr
curr = temp
return pre
二、递归
1、Java
class Solution {
public ListNode reverseList(ListNode head) {
// 递归
if(head == null || head.next == null) return head;
ListNode last = reverseList(head.next);
head.next.next = head;
head.next = null;
return last;
}
}
2、python
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
# 递归
if head == None or head.next == None:
return head
last = Solution.reverseList(self, head.next)
head.next.next = head
head.next = None
return last