剑指 Offer 06. 从尾到头打印链表
取出链表元素再翻转数组
class Solution {
public:
vector<int> reversePrint(ListNode* head) {
vector<int>fp;
while(head){
fp.push_back(head->val);
head=head->next;
}
reverse(fp.begin(),fp.end());
return fp;
}
};
剑指 Offer 24. 反转链表
将链表元素提出来,然后翻转构造新链表即可
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head==NULL) return NULL;
ListNode* ans=new ListNode();
ListNode* f=ans;
vector<int>v;
while(head){
v.push_back(head->val);
head=head->next;
}
for(int i=v.size()-1;i>=0;i--){
ans->val=v[i];
if(i>0){
ans->next=new ListNode();
ans=ans->next;
}
else break;
}
ans->next=NULL;
return f;
}
};
剑指 Offer 35. 复杂链表的复制
这题没太懂什么意思,先上题解
class Solution {
public:
unordered_map<Node*, Node*> cachedNode;
Node* copyRandomList(Node* head) {
if (head == nullptr) {
return nullptr;
}
if (!cachedNode.count(head)) {
Node* headNew = new Node(head->val);
cachedNode[head] = headNew;
headNew->next = copyRandomList(head->next);
headNew->random = copyRandomList(head->random);
}
return cachedNode[head];
}
};