avatar

目录
leetcode_day

3.1

3.2(链表,迭代,递归)

类似于头插法

c++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class 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++
1
2
3
4
5
6
7
8
9
10
11
12
13
class 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++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class 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--];
}
};
文章作者: Sunxin
文章链接: https://sunxin18.github.io/2020/03/02/leetcode-day/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 lalala
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论