今日份题目:
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例1
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
提示
0 <= 节点个数 <= 5000
题目思路
没必要修改原链表,只需将原链表中的数据使用deque双端队列倒序排序,然后正序读出,每读出一个新建分配一个动态内存节点加入结果队列,最后返回结果队列。注意,如果输入是空队列,就返回原来的空队列即可。
代码
/**
* 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) return head;
ListNode* cur=head;
ListNode ans(1);
deque<int> p;
while(cur!=NULL)
{
p.push_front(cur->val);
cur=cur->next;
}
int c=p.front();
p.pop_front();
ListNode* q=new ListNode(c);
ans.next=q;
ListNode* res=ans.next;//记录结果链表初始位置
ListNode* first=res;//用于后续遍历
while(!p.empty())
{
int ccur=p.front();
p.pop_front();
ListNode* q=new ListNode(ccur);
first->next=q;
first=first->next;
}
return res;
}
};