24.两两交换链表中的节点
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* dy_head = new ListNode(0);
dy_head->next = head;
ListNode* cur = dy_head->next;
while(cur != nullptr && cur->next != nullptr){
ListNode* tmp = cur->next;
int tmp_val = tmp->val;
tmp->val = cur->val;
cur->val = tmp_val;
cur = cur->next->next;
}
return head;
}
};
19.删除链表倒数第N个节点
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* dy_head = new ListNode(0);
dy_head->next = head;
ListNode* fast = dy_head;
ListNode* slow = dy_head;
while(n+1 && fast != nullptr){
fast = fast->next;
n--;
}
while(fast != nullptr){
fast = fast->next;
slow = slow->next;
}
// ListNode* tmp = slow->next;
slow->next = slow->next->next;
// delete tmp;
// tmp=nullptr;
return dy_head->next;
}
};
面试题02.07链相交
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode* cur_a = headA;
ListNode* cur_b = headB;
int len_a = 0;
int len_b = 0;
while(cur_a != NULL){
len_a += 1;
cur_a = cur_a->next;
}
while(cur_b != NULL){
len_b += 1;
cur_b = cur_b->next;
}
//将A,B指针重新指向头部
cur_a = headA;
cur_b = headB;
//保证A是最长链表
if(len_b > len_a){
swap(len_a,len_b);
swap(cur_a,cur_b);
}
int k = len_a - len_b;
while(k){
cur_a = cur_a->next;
k--;
}
while(cur_a != NULL){
if(cur_a == cur_b)
return cur_a;
cur_a = cur_a->next;
cur_b = cur_b->next;
}
return NULL;
}
};
142.环形链表
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
ListNode* fast = head;
ListNode* slow = head;
while(fast != NULL && fast->next !=NULL){
slow = slow->next;
fast = fast->next->next;
if(fast == slow){
ListNode *index1 = fast;
ListNode *index2 = head;
while(index1 != index2){
index1 = index1->next;
index2 = index2->next;
}
return index1;
}
}
return NULL;
}
};
(PS:忙着写中期报告,只完成了代码的实现,解题思路等有空了补齐,顺便一起复习了这些知识点)