# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head: return
pre = None
while head.next:
nex = head.next
head.next = pre
pre = head
head = nex
head.next = pre
return head
#java版本
ListNode* reverseList(ListNode* head) {
if(!head){
return nullptr;
}
ListNode* first = head;//始终指向原链表的首位元素
ListNode* target = head->next;//始终指向即将要放到当前链表首元素之前的目标元素
while(target != nullptr){
first->next = target->next;
ListNode* temp = target->next;
target->next = head;
head = target;
target = temp;
}
return head;
}
递归:
ListNode* reverseList(ListNode* head) {
if(!head){
return nullptr;
}
return reverse(head, head, head->next);
}
ListNode* reverse(ListNode* head, ListNode* first, ListNode* target){
if(!target){
return head;
}
first->next = target->next;
ListNode* temp = target->next;
target->next = head;
return reverse(target, first, temp);
}