LeetCode 206.反转链表
Requirement
反转一个单链表。
示例
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
解题思路1
遍历该链表,将各结点值依次顺序存入动态数组vector中;
再将临时指针tmp指向头结点head,倒序将vector中的各元素值输入,赋给tmp指针指向的当前结点——即是说,直接在原链表中依次修改各结点的值,而不必新建链表。
代码
/**
* 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)
{
vector<int> value(0);
ListNode *tmp = new ListNode(0);
tmp = head;
int tempValue = 0;
//遍历链表,将各结点值存入vector中
while(tmp != nullptr)
{
tempValue = tmp -> val;
tmp = tmp -> next;
value.push_back(tempValue);
}
//重置指针,指向头结点
tmp = head;
//依次修改原链表中各结点的值
int length = value.size()-1;
while(length >= 0)
{
tmp -> val = value.at(length);
tmp = tmp -> next;
length--;
}
return head;
}
};
Assessment
Remark
同样的思路也可以将元素存在栈中,然后依次弹出,亦符合逆序的要求。
还可以用递归、迭代的方式实现。