反转链表
1、双指针
struct ListNode
{
int val;
ListNode* next;
ListNode(int x):val(x), next(nullptr){}
};
class Solution{
ListNode* reverseList(ListNode* head){
ListNode* temp;
ListNode* cur = head;
ListNode* pre = NULL;
while(cur)
{
temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
return pre;
}
}
class ListNode:
def __init__(self, val = 0; next = None):
self.val = val
self.next = None
class Solution:
def reverseList(self, head):
pre = None
cur = head
while(cur):
temp = cur.next
cur.next = pre
pre = cur
cur = temp
return pre
2、递归法
struct ListNode{
int val;
ListNode* next;
ListNode(x): val(x), next(nullptr){}
};
class Solution
{
ListNode* reverse(ListNode*pre, ListNode*cur)
{
if(cur == NULL)
{
return pre;
}
ListNode*temp = cur.next;
cur.next = pre;
return reverse(cur, temp);
}
ListNode* reverseList(ListNode* head){
reverse(NULL, head);
}
}
class Solution:
def reverse(self, pre, cur):
if(cur == None):
return pre;
temp = cur.next
cur.next = pre
return self.reverse(cur, temp)
def reverseList(self, head):
return self.reverse(None, head)