做网站公司宁波,表格制作excel,wordpress 保存图片,免费建网站可以找哪家英文网站给你一个链表的头节点 head 。删除链表的中间节点 #xff0c;并返回修改后的链表的头节点 head。 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点#xff08;下标从 0 开始#xff09;#xff0c;其中 ⌊x⌋ 表示小于或等于 x 的最大整数。 对于 n 1、2、3、4 和… 给你一个链表的头节点 head 。删除链表的中间节点 并返回修改后的链表的头节点 head。 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点下标从 0 开始其中 ⌊x⌋ 表示小于或等于 x 的最大整数。 对于 n 1、2、3、4 和 5 的情况中间节点的下标分别是 0、1、1、2 和 2 。 示例 1 输入head [1,3,4,7,1,2,6] 输出[1,3,4,1,2,6] 解释 上图表示给出的链表。节点的下标分别标注在每个节点的下方。 由于 n 7 值为 7 的节点 3 是中间节点用红色标注。 返回结果为移除节点后的新链表。
示例 2 输入head [1,2,3,4] 输出[1,2,4] 解释 上图表示给出的链表。 对于 n 4 值为 3 的节点 2 是中间节点用红色标注。
示例 3 输入head [2,1] 输出[2] 解释 上图表示给出的链表。 对于 n 2 值为 1 的节点 1 是中间节点用红色标注。 值为 2 的节点 0 是移除节点 1 后剩下的唯一一个节点。
解题思路1 链表的删除 /*** 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* deleteMiddle(ListNode* head) {if (head-next nullptr) {return nullptr;}int count 0;ListNode* temp head;while (temp ! nullptr) { // 计算出链表的长度temp temp-next;count;}int mid count / 2;coutmidendl;ListNode* p head;for (int i 0; i mid; i) {if (mid 2) {// 如果中间位置小于2说明只有两个元素直接指向下一个元素的后一个即nullhead-next head-next-next;break;}if (i mid-1) {//移动到中间位置的前一个结点p-nextp-next-next;}p p-next;//移动指针}return head;}
};