- 两两交换链表中的节点
这里最重要的就是这个步骤图,刷题的时候需要记清楚,然后复刻出来
ListNode* swapPairs(ListNode* head) {
ListNode* dummyNode = new ListNode(0);
dummyNode->next = head;
ListNode* cur = dummyNode;
while (cur->next != NULL && cur->next->next != NULL) {
ListNode* temp = cur->next;
ListNode* temp1 = cur->next->next->next;
cur->next = cur->next->next;
cur->next->next = temp;
cur->next->next->next = temp1;
cur = cur->next->next;
}
return dummyNode->next;
}
- 删除链表的倒数第 N 个结点
这个题最重要的问题就是如何确定fast的边界条件 很重要 要想明白
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode * dummyHead=new ListNode(0);
dummyHead->next=head;
ListNode * fast= dummyHead;
ListNode * slow= dummyHead;
while(n--&&fast!=NULL){
fast=fast->next;
}
fast=fast->next;
while(fast!=NULL){
slow=slow->next;
fast=fast->next;
}
slow->next=slow->next->next;
return dummyHead->next;
}
142.环形链表II
这个题最重要的就是把老师的那个公式推导出来
这个推导太经典了
ListNode *detectCycle(ListNode *head) {
ListNode * slow=head;
ListNode * fast=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 index2;
}
}
return NULL;
}
有一点没有明白就是最后返回值为什么为NULL