Description:
Reverse a linked list.
Example:
For linked list 1->2->3, the reversed linked list is 3->2->1
Link:
http://www.lintcode.com/en/problem/reverse-linked-list/
解題思路:
針對(duì)每個(gè)節(jié)點(diǎn)curr,只要改變?cè)摴?jié)點(diǎn)的next,讓其指向curr前一個(gè)節(jié)點(diǎn)(需要用一個(gè)變量prev儲(chǔ)存),然后再對(duì)這個(gè)節(jié)點(diǎn)的下個(gè)節(jié)點(diǎn)進(jìn)行相同的操作。
這道題搞清楚以后,針對(duì)k-group那道題的反轉(zhuǎn)代碼就會(huì)寫(xiě)了。
Tips:
在進(jìn)行反轉(zhuǎn)操作之后,head已經(jīng)不是第一個(gè)節(jié)點(diǎn)了而是最后一個(gè),此時(shí)用dummy并不好用,反而直接返回prev這個(gè)點(diǎn)方便。
Time Complexity:
O(n),n為節(jié)點(diǎn)個(gè)數(shù)
完整代碼:
ListNode *reverse(ListNode *head) { ListNode *temp; ListNode *curr = head; ListNode *prev = NULL; while(curr != NULL) { temp = curr->next; curr->next = prev; prev = curr; curr = temp; } return prev; }