深度解析开源逆向工程工具:Wand-Enhancer实现安全动态注入的架构演进
2026/7/27 9:09:31
struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, ListNode *next) : val(x), next(next) {} };ListNode* head = new ListNode(1); head->next = new ListNode(2); head->next->next = new ListNode(3);ListNode* createList(const vector<int>& arr) { if (arr.empty()) return nullptr; ListNode* head = new ListNode(arr[0]); ListNode* cur = head; for (int i = 1; i < arr.size(); i++) { cur->next = new ListNode(arr[i]); cur = cur->next; } return head; }调用
vector<int> nums = {1, 2, 3, 4, 5}; ListNode* list = createList(nums);ListNode* dummy = new ListNode(-1); // 值随便填 ListNode* cur = dummy; for (int val : arr) { cur->next = new ListNode(val); cur = cur->next; } ListNode* realHead = dummy->next; // 这才是真正的头 // 用完记得 delete dummyListNode* createNode(int val) { return new ListNode(val); }ListNode* createList(const vector<int>& arr) { if (arr.empty()) return nullptr; ListNode* head = new ListNode(arr[0]); ListNode* cur = head; for (int i = 1; i < arr.size(); i++) { cur->next = new ListNode(arr[i]); cur = cur->next; } return head; }void deleteList(ListNode* head) { while (head != nullptr) { ListNode* temp = head; head = head->next; delete temp; } }void traverse(ListNode* head) { ListNode* cur = head; while (cur != nullptr) { cout << cur->val << " "; cur = cur->next; } cout << endl; }void printReverse(ListNode* head) { if (head == nullptr) return; printReverse(head->next); cout << head->val << " "; }bool findValue(ListNode* head, int target) { ListNode* cur = head; while (cur != nullptr) { if (cur->val == target) return true; cur = cur->next; } return false; }int getLength(ListNode* head) { int len = 0; while (head != nullptr) { len++; head = head->next; } return len; }ListNode* getKthNode(ListNode* head, int k) { int count = 1; while (head != nullptr && count < k) { head = head->next; count++; } return head; // 如果k超出范围,返回nullptr }ListNode* insertAtHead(ListNode* head, int val) { ListNode* newNode = new ListNode(val); newNode->next = head; return newNode; // 返回新的头节点 }ListNode* insertAtTail(ListNode* head, int val) { ListNode* newNode = new ListNode(val); if (head == nullptr) return newNode; ListNode* cur = head; while (cur->next != nullptr) { cur = cur->next; } cur->next = newNode; return head; }ListNode* insertAtPosition(ListNode* head, int val, int pos) { if (pos <= 1) return insertAtHead(head, val); ListNode* newNode = new ListNode(val); ListNode* cur = head; // 找到第pos-1个节点 for (int i = 1; i < pos - 1 && cur != nullptr; i++) { cur = cur->next; } if (cur == nullptr) { // 位置超出范围,插入到尾部 return insertAtTail(head, val); } newNode->next = cur->next; cur->next = newNode; return head; }void insertAfterNode(ListNode* node, int val) { if (node == nullptr) return; ListNode* newNode = new ListNode(val); newNode->next = node->next; node->next = newNode; }ListNode* deleteHead(ListNode* head) { if (head == nullptr) return nullptr; ListNode* newHead = head->next; delete head; return newHead; }ListNode* deleteTail(ListNode* head) { if (head == nullptr) return nullptr; if (head->next == nullptr) { delete head; return nullptr; } ListNode* cur = head; while (cur->next->next != nullptr) { cur = cur->next; } delete cur->next; cur->next = nullptr; return head; }ListNode* deleteByValue(ListNode* head, int val) { if (head == nullptr) return nullptr; // 如果要删除的是头节点 if (head->val == val) { ListNode* newHead = head->next; delete head; return newHead; } ListNode* cur = head; while (cur->next != nullptr && cur->next->val != val) { cur = cur->next; } if (cur->next != nullptr) { ListNode* toDelete = cur->next; cur->next = cur->next->next; delete toDelete; } return head; }ListNode* deleteAtPosition(ListNode* head, int pos) { if (head == nullptr) return nullptr; if (pos == 1) return deleteHead(head); ListNode* cur = head; for (int i = 1; i < pos - 1 && cur != nullptr; i++) { cur = cur->next; } if (cur == nullptr || cur->next == nullptr) { return head; // 位置超出范围 } ListNode* toDelete = cur->next; cur->next = cur->next->next; delete toDelete; return head; }ListNode* deleteAllByValue(ListNode* head, int val) { // 先处理头节点连续等于val的情况 while (head != nullptr && head->val == val) { ListNode* temp = head; head = head->next; delete temp; } if (head == nullptr) return nullptr; ListNode* cur = head; while (cur->next != nullptr) { if (cur->next->val == val) { ListNode* temp = cur->next; cur->next = cur->next->next; delete temp; } else { cur = cur->next; } } return head; }void updateValue(ListNode* head, int k, int newVal) { ListNode* node = getKthNode(head, k); if (node != nullptr) { node->val = newVal; } }ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode dummy(0); // 哑节点 ListNode* cur = &dummy; while (l1 != nullptr && l2 != nullptr) { if (l1->val <= l2->val) { cur->next = l1; l1 = l1->next; } else { cur->next = l2; l2 = l2->next; } cur = cur->next; } cur->next = (l1 != nullptr) ? l1 : l2; return dummy.next; }bool hasCycle(ListNode* head) { ListNode* slow = head; ListNode* fast = head; while (fast != nullptr && fast->next != nullptr) { slow = slow->next; fast = fast->next->next; if (slow == fast) return true; } return false; }ListNode* detectCycle(ListNode* head) { ListNode* slow = head; ListNode* fast = head; // 第一次相遇 while (fast != nullptr && fast->next != nullptr) { slow = slow->next; fast = fast->next->next; if (slow == fast) break; } if (fast == nullptr || fast->next == nullptr) return nullptr; // 从头开始,同步移动直到相遇 slow = head; while (slow != fast) { slow = slow->next; fast = fast->next; } return slow; }ListNode* getIntersectionNode(ListNode* headA, ListNode* headB) { if (headA == nullptr || headB == nullptr) return nullptr; ListNode* pA = headA; ListNode* pB = headB; while (pA != pB) { pA = (pA == nullptr) ? headB : pA->next; pB = (pB == nullptr) ? headA : pB->next; } return pA; }ListNode* swapPairs(ListNode* head) { ListNode dummy(0); dummy.next = head; ListNode* prev = &dummy; while (prev->next != nullptr && prev->next->next != nullptr) { ListNode* first = prev->next; ListNode* second = prev->next->next; // 交换 first->next = second->next; second->next = first; prev->next = second; prev = first; } return dummy.next; }ListNode* sortList(ListNode* head) { if (head == nullptr || head->next == nullptr) return head; // 找中点 ListNode* slow = head; ListNode* fast = head; ListNode* prev = nullptr; while (fast != nullptr && fast->next != nullptr) { prev = slow; slow = slow->next; fast = fast->next->next; } prev->next = nullptr; // 断开链表 // 递归排序 ListNode* left = sortList(head); ListNode* right = sortList(slow); return mergeTwoLists(left, right); }#include <bits/stdc++.h> using namespace std; struct ListNode { int val; ListNode* next; ListNode(int x) : val(x), next(nullptr) {} }; ListNode* reverseList(ListNode* head) { ListNode* prev = nullptr; ListNode* curr = head; while (curr != nullptr) { ListNode* nextTemp = curr->next; curr->next = prev; prev = curr; curr = nextTemp; } return prev; } void printList(ListNode* head) { while (head != nullptr) { cout << head->val << " "; head = head->next; } cout << endl; } int main() { // 从输入构造数组 vector<int> arr; int num; while (cin >> num) { arr.push_back(num); } // 判断数组是否为空 if (arr.empty()) return 0; // 构造链表 ListNode* head = new ListNode(arr[0]); ListNode* cur = head; for (int i = 1; i < arr.size(); i++) { cur->next = new ListNode(arr[i]); cur = cur->next; } ListNode* reversed = reverseList(head); printList(reversed); return 0; }