小说网站开发实训报告,uc wordpress,泰安房产管理局官网,常州装修网站建设公司第一题#xff1a; 题目链接#xff1a;
思路一#xff1a; 1.第一遍遍历链表#xff0c;直到找到尾结束第一次遍历#xff0c;遍历的过程中记录链表长度。定义长度为k。 2.确定中间是第几个节点#xff0c;计算是k/21根据题目要求。 3.再一次去遍历我们的数组…第一题 题目链接
思路一 1.第一遍遍历链表直到找到尾结束第一次遍历遍历的过程中记录链表长度。定义长度为k。 2.确定中间是第几个节点计算是k/21根据题目要求。 3.再一次去遍历我们的数组找到中间节点返回节点。 思路二 使用了一个快慢指针的思想。 1.定义一个慢指针和一个快指针。 2.v快2v慢同起到时间时间是时刻相同。 3.x快2x慢。当快指针走到尾的时候慢指针才走到中间。 struct ListNode* middleNode(struct ListNode* head){struct ListNode* quichead,*slowhead;//判断奇数判断偶数.两个条件满足一个就结束。while((quic) (quic-next)){slowslow-next;quicquic-next-next;}return slow;
}第二题 题目链接
思路一 1.第一遍遍历链表直到找到尾结束第一次遍历遍历的过程中记录链表长度。定义长度为n 2.确定倒数第k个是正数第n-k个 3.再一次去遍历我们的数组找到倒数第k个返回节点。 思路二 1.相对距离的使用定义一个前面的指针和后指针初始都是在头节点。 2.先循环遍历后指针k让后指针向后移动k次前后指针再用相同的速度向后同时移动当后指针为空时就结束这个时候的前指针就是倒数第k个节点。 3.特殊情况 1.一共k个节点倒数第k个就是第一个节点。循环结束n1ffastNULL判断n1返回头就可以。 2.节点为空链表没有数据直接返回空在开始就判断。 3n0和fastNULL说明我们的接下来的双指针移动没有问题可以正常进行。 struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {// write code here//对于一个链表来说应该开始就判断是否为空链表。if(pListHeadNULL){return NULL;}struct ListNode* fastpListHead,*slowpListHead;int nk;//位置差搞出来while(nfast-next!NULL){fastfast-next;n--;}//一共只有k个节点的情况倒数第k个就是头if(n1){return pListHead;}//循环找第k个节点的时候没有超出链表的范围前后的指针都是正常的。if(n0){while(fast!NULL){slowslow-next;fastfast-next;}return slow;}return NULL;
}