面试中常常遇到反转单链表,特此总结。面试
ListNode* reverseListRecursive(ListNode *head) { if(head == NULL || head->next == NULL) return head; ListNode *newHead = reverseListRecursive(head->next); head->next->next = head; head->next = NULL; return newHead; }
算法执行过程以下算法
将头结点后面的结点经过头插法一个个地插入到链表前面。spa
ListNode* reverseList(ListNode *head) { if(head == NULL || head->next == NULL) return head; ListNode *newHead = NULL; ListNode *p = head; while (p != NULL) { ListNode *tmp = p; p = p->next; tmp->next = newHead; newHead = tmp; } return newHead; }
算法执行流程以下code