3.1 3.2(链表,迭代,递归) 类似于头插法 c++1234567891011121314151617class Solution {public: ListNode* reverseList(ListNode* head) { if(head==NULL) return NULL; ListNode* pre=NULL; ListNode* cur=head; while(cur!=NULL) { ListNode* p=cur->next; cur->next= pre; pre=cur; cur=p; } return pre; }}; 递归:关键就是理解p是反转后链表的表头 c++12345678910111213class Solution {public: ListNode* reverseList(ListNode* head) { if (head == NULL || head->next == NULL) return head; // 如果当前要反转的节点为 null 或者反转链表为 null // head.next 为 null,即反转链表的尾结点不存在,即反转链表不存在 ListNode *p = reverseList(head->next);// 节点 p 其实就是反转链表的头节点 head->next->next = head; head->next = NULL; return p; }}; 3.3(数组,双指针) c++12345678910111213141516class Solution {public: void merge(vector<int>& A, int m, vector<int>& B, int n) { int i=m-1; int j=n-1; int index=m+n-1; while(i>=0&&j>=0) { if(B[j]>=A[i]) A[index--]=B[j--]; else A[index--]=A[i--]; } while(j >= 0) A[index--] = B[j--]; }};