206. Reverse Linked List
Reverse a singly linked list. A linked list can be reversed either iteratively or recursively. Could you implement both?
分析
翻转链表可以通过迭代方式也可以通过递归方式。递归方式主要是确定递归退出条件,当head为空时返回空,当head->next为空时返回head;
源码
// 迭代方式
ListNode* reverseList(ListNode* head) {
ListNode *iList = head;
ListNode *preNode = NULL;
while(iList) {
ListNode *tmp = iList->next;
iList->next = preNode;
preNode = iList;
iList = tmp;
}
return preNode;
}
// 递归方式
ListNode* reverseList(ListNode* head) {
if(head == NULL) return NULL;
if(head->next == NULL) return head;
ListNode *currentNode = head->next;
ListNode *pHead = reverseList(currentNode);
currentNode->next = head;
head->next = NULL;
return pHead;
}