链表
struct ListNode {
int val;
ListNode *next;
ListNode(int x): val(x), next(nullptr) {}
};
链表反转
ListNode* reverse_list(ListNode *head) {
ListNode *pre = nullptr, *curr = head, *next = nullptr;
while(curr) {
next = curr->next;
curr->next = pre;
pre = curr;
curr = next;
}
return pre;
}
合并两个有序链表
ListNode* merge_list(ListNode* l1, ListNode* l2) {
if(l1 == nullptr) return l2;
if(l2 == nullptr) return l1;
ListNode* head = (l1->val <= l2->val) ? l1 : l2;
ListNode* pre = head;
ListNode* curr1 = head->next;
ListNode* curr2 = (head == l2) ? l1 : l2;
while(curr1 != nullptr && curr2 != nullptr) {
if(curr1->val <= curr2->val) {
pre->next = curr1;
curr1 = curr1->next;
} else {
pre->next = curr2;
curr2 = curr2->next;
}
pre = pre->next;
}
if(curr1 == nullptr) pre->next = curr2;
if(curr2 == nullptr) pre->next = curr1;
return head;
}
链表相加
ListNode* add_two_number(ListNode* l1, ListNode* l2) {
}
划分链表
待续
> cd ..