题目:
Reverse a singly linked list.
Hint:
A linked list can be reversed either iteratively or recursively. Could you implement both?
题意:
翻转链表。该题可以采用轮询跟递归调用两种方法实现。
思路一:
采用轮序 的方式实现,依次交换两个相邻元素。
代码:8ms
/** * 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) { ListNode *pre = NULL; ListNode *next = NULL; while(head!=NULL){ next = head->next; head->next = pre; pre = head; head = next; } return pre; } };思路二:
采用递归的方法实现。
代码:12ms
/** * 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) { return reverseList(head, nullptr); } private: ListNode* reverseList(ListNode* head, ListNode *newhead) { if(head==nullptr){ return newhead; } ListNode *next = head->next; head->next = newhead; return reverseList(next, head); } };