网站建设网站推广优化,网站设计案例方案,wordpress启用特色,智慧团建官网登录网址链表OJ 一#xff0c;移除链表元素1.1分析1.2代码 二#xff0c;找到链表的中间节点2.1分析2.2代码 三#xff0c;反转链表3.1分析3.2代码 四#xff0c;找到链表中倒数第k个节点4.1分析4.2代码 一#xff0c;移除链表元素
移除链表元素
1.1分析
这里的删除要分成两种… 链表OJ 一移除链表元素1.1分析1.2代码 二找到链表的中间节点2.1分析2.2代码 三反转链表3.1分析3.2代码 四找到链表中倒数第k个节点4.1分析4.2代码 一移除链表元素
移除链表元素
1.1分析
这里的删除要分成两种情况来考虑因为这个题目给了我们头节点所以分成头删和非头删。因为要记录下一个节点的位置所以1我们这里选择新增两个指针方便记录。因为我们已经熟悉了链表所以这代码对我们来说还是很容易的。
1.2代码
struct ListNode* removeElements(struct ListNode* head, int val){struct ListNode* curhead;struct ListNode* prevNULL;//遍历链表找满足条件的valwhile(cur){if(cur-valval){//头删特殊处理if(curhead){headcur-next;free(cur);curhead;}//一般化删除else{prev-nextcur-next;free(cur);curprev-next;}}else{prevcur;curcur-next;}}return head;
}二找到链表的中间节点
链表的中间节点
2.1分析
这里要让我们找到中间的节点我们从题目出发有个非常巧妙的写法就是快慢指针我们定义两个指针慢指针正常一次走一步而快指针一次走两步那么当快指针走到结束的时候慢指针就在中间位置了。
2.2代码
struct ListNode* middleNode(struct ListNode* head){struct ListNode*slowhead;struct ListNode*fasthead;while(fastfast-next){slowslow-next;fastfast-next-next;}return slow;
}三反转链表
反转链表
3.1分析
创建一个newhead链表把原链表从左到右一个一个取出来放到newhead中去。
3.2代码
struct ListNode* reverseList(struct ListNode* head){struct ListNode*curhead;struct ListNode*newheadNULL;while(cur){struct ListNode*nextcur-next;cur-nextnewhead;newheadcur;curnext;}return newhead;
}四找到链表中倒数第k个节点
牛客——找到链表中倒数第k个节点
4.1分析
这里我们依旧选择快慢指针。 我们假设k是3那么我们定义fast和slow两个指针第一让fast先走k下然后两个指针一起走那么当fast走到NULLslow所在的位置就是倒数第k个位置。
4.2代码
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {// write code herestruct ListNode*fastpListHead;struct ListNode*slowpListHead;while(k--){if(fastNULL){return NULL;}else {fastfast-next;}}while(fast){fastfast-next;slowslow-next;}return slow;
}