24两俩交换
/**
* Definition for singly-linked list.
* 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) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* dummyHead = new ListNode(0);
dummyHead->next = head;
ListNode* cur = dummyHead;
while(cur->next != nullptr && cur->next->next != nullptr){
ListNode* tmp0 = cur->next;
ListNode* tmp1 = cur->next->next->next;
cur->next = cur->next->next;
cur->next->next = tmp0;
cur->next->next->next = tmp1;
cur = cur->next->next;
}
return dummyHead->next;
}
};
19 删除倒数第n个元素
/**
* Definition for singly-linked list.
* 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) {}
* };
*/
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* dummyHead = new ListNode(0);
dummyHead->next = head;
ListNode* fast = dummyHead;
ListNode* low = dummyHead;
for(int i = 0; i < n ; i++){
fast = fast->next;
}
while(fast->next != nullptr){
fast = fast->next;
low = low->next;
}
ListNode* tmp = low->next;
low->next = tmp->next;
delete tmp;
tmp = nullptr;
return dummyHead->next;
}
};
02.07
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode* curA = headA;
ListNode* curB = headB;
int lenA = 0, lenB = 0;
while (curA != NULL) {
lenA++;
curA = curA->next;
}
while (curB != NULL) {
lenB++;
curB = curB->next;
}
curA = headA;
curB = headB;
if(lenA >= lenB){
for(int i = 0; i < lenA - lenB; i++){
curA = curA->next;
}
while (curA != NULL) {
if (curA == curB) {
return curA;
}
curA = curA->next;
curB = curB->next;
}
}
else{
for(int j = 0; j < lenB -lenA;j++){
curB =curB->next;
}
while(curB != NULL){
if(curA == curB){
return curB;
}
curA = curA->next;
curB = curB->next;
}
}
return NULL;
}
};
142 没想到怎末用快慢指针判断有环
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
if (!head || !head->next) return NULL; // 链表为空或只有一个节点,不可能有环
ListNode *slow = head;
ListNode *fast = head;
// 使用快慢指针寻找相遇点
while (fast && fast->next) {
slow = slow->next;
fast = fast->next->next;
if (slow == fast) break;
}
// 如果没有相遇,说明无环
if (!fast || !fast->next) return NULL;
// 将慢指针重新指向头节点,然后快慢指针同速前进,直到再次相遇
slow = head;
while (slow != fast) {
slow = slow->next;
fast = fast->next;
}
// 相遇点即为环的起始节点
return slow;
}
};