ACwing刷题之简单题(一)
写在前面
为了应付下学期的CCF考试,我在知乎上搜索刷题网站。看到有知乎er分享了这个acwing,打开之后很兴奋,这正是我想要的刷题网站。
从尾到头打印链表
输入一个链表的头结点,按照 从尾到头 的顺序返回节点的值。
返回的结果用数组存储。
样例
1 2
| 输入:[2, 3, 5] 返回:[5, 3, 2]
|
思路
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
class Solution { public: vector<int> printListReversingly(ListNode* head) { vector<int> res; while(head){ res.push_back(head->val); head = head->next; } return vector<int> (res.rbegin(),res.rend()); } };
|
反转链表
定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。
思考题:
样例
1 2 3
| 输入:1->2->3->4->5->NULL
输出:5->4->3->2->1->NULL
|
思路(迭代)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
class Solution { public: ListNode* reverseList(ListNode* head) { if(!head || !head->next) return head; auto a = head,b = a->next; while(b){ auto c = b->next; b->next = a; a = b; b = c; } head->next = NULL; return a; } };
|
思路(递归)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
class Solution { public: ListNode* reverseList(ListNode* head) { if(!head || !head->next) return head; auto tail = reverseList(head->next); head->next->next = head; head->next = NULL; return tail; } };
|