保存当前节点、前一个节点和下一个节点即可。
class Solution { public:
ListNode* reverseList(ListNode* head) { ListNode* prev = NULL; ListNode* curr = head; while (curr != NULL) { ListNode* nextTemp = curr->next; curr->next = prev; prev = curr; curr = nextTemp; } return prev; } };
还有一种递归方法。假设链表为 n1 → … → nk-1 → nk → nk+1 → … → nm → Ø,如果nk+1 到nm 已经被翻转了,当前我们位于nk,链表现在是n1 → … → nk-1 → nk → nk+1 ← … ← nm,把nk也翻转后会有:nk.next.next = nk
class Solution { public:ListNode* reverseList(ListNode* head) { if (head == NULL || head->next == NULL) return head; ListNode* p = reverseList(head->next); head->next->next = head; head->next = NULL; return p; } };