问题描述:
Reverse a singly linked list.
Example:
Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL
Follow up:
A linked list can be reversed either iteratively or recursively. Could you implement both?
解决方案:
逐个反转每项的next
成员。
- 创建一个新指针
new_head
,值为NULL
,用来表示现元素的前一个元素。由于第一个元素之前没有元素,所以用NULL
值来代替。 - 创建一个新指针
next
来保存现元素的next
成员。 - 将
head
现在指向的元素的next
指针指向前一个元素,即new_head
所指的元素。 - 移向下一个元素。
- 如果某一次操作时,
head
已经是空指针了,说明链表遍历完了。此时new_head
指向原链表的最后一项,也就是新链表的第一项。
/**
* 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 *new_head = NULL;
ListNode *next = NULL;
while (head)
{
next = head->next;
head->next = new_head;
new_head = head;
head = next;
}
return new_head;
}
};