class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* dummyNode = new ListNode(0) ;
dummyNode->next = head;
ListNode* cur = dummyNode;
while(cur->next != NULL && cur->next->next != NULL){ //注意这里的判断条件,只要下两个元素存在即可继续下去,但第三个元素存在与否无所谓
ListNode* tmp = cur->next;
ListNode* tmp2 = cur->next->next->next;
cur->next = cur->next->next;
cur->next->next = tmp; //这里千万不要乱套,每一次cur后面的指向都在更新
cur->next->next->next = tmp2;
cur = cur->next->next;
}
return dummyNode->next; //注意这里不是返回head了,因为头结点已经变了
}
};
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int length = nums.size();
int left = 0;
int right = length - 1;
while( left <= right ){ //注意二分查找法的左闭右开的写法
int mid = (left + right) / 2;
if( nums[mid] > target ){
right = mid - 1;
}
else if( nums[mid] < target )
{
left = mid + 1;
}
else{
return middle;
}
}
return right + 1; //当返回此步的时候,意味着就是没有匹配到的元素,因此不是在某元素后插入,就是在整个数组后插入(该元素比整个数组的所有元素都大)
}
};
- 删除链表的倒数第N个节点
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* dummyHead = new ListNode(0);
dummyHead->next = head;
ListNode* pre = dummyHead;
ListNode* cur = dummyHead;
while(n-- && pre != NULL){
pre = pre->next;
}
pre = pre->next;
while(pre != NULL){
pre = pre->next;
cur = cur->next;
}
cur->next = cur->next->next;
return dummyHead->next;
}
};