題目來源:LeetCode 206. 反轉鏈表
題目描述:
反轉一個單鏈表。
示例:
輸入: 1->2->3->4->5->NULL
輸出: 5->4->3->2->1->NULL
進階:
你可以迭代或遞歸地反轉鏈表。你能否用兩種方法解決這道題?
思路:順序遍歷鏈表,將反轉後的鏈表的最後一個元素的next指向當前訪問的節點的後繼節點,並將每一次訪問到的節點作爲新的頭結點,直至反轉後的鏈表的最後一個元素的next指向NULL爲止。
實現代碼(C++):
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head==NULL || head->next==NULL)
{
return head;
}
ListNode* cur_head = head;
ListNode* temp = NULL;
while(head->next != NULL)
{
temp = head->next;
head->next = head->next->next;
temp->next = cur_head;
cur_head = temp;
}
return cur_head;
}
};