重庆响应式网站多少钱,做医疗信息网站的域名,移动端应用开发,手工外包加工网可信吗给定一个头结点为 head 的非空单链表#xff0c;返回链表的中间结点。
如果有两个中间结点#xff0c;则返回第二个中间结点 代码一#xff1a; 自己想的一个方法
class Solution {public ListNode middleNode(ListNode head) {ListNode p1 head;ListNode p2 head;//i,j…给定一个头结点为 head 的非空单链表返回链表的中间结点。
如果有两个中间结点则返回第二个中间结点 代码一 自己想的一个方法
class Solution {public ListNode middleNode(ListNode head) {ListNode p1 head;ListNode p2 head;//i,j作为判断标志int i 1;int j 1;//int res 0;while(p1.next!null){p1 p1.next;i;if(j(i1)){等价于ji/2j;p2 p2.next;}}return p2;}
}代码二 定义一个链表数组存储所有节点然后返回中间节点。不得不说是自己格局小了不会也不敢定义一个链表数组
class Solution {public ListNode middleNode(ListNode head) {ListNode[] temp new ListNode[100];ListNode p head;int x 0;while(p!null){temp[x] p;p p.next;}return temp[x/2];}
}代码三 遍历两遍链表第一遍用一个指针记录链表个数第二遍遍历到1/2即返回结点
class Solution {public ListNode middleNode(ListNode head) {int i 0;ListNode p head;while(p!null){i;p p.next;}ListNode q head;for(int j 0;ji/2;j){q q.next;}return q;}
}代码四 双指针快指针一次走两步慢指针一次走一步。不得不说官方果然还是官方
class Solution {public ListNode middleNode(ListNode head) {ListNode fast head;ListNode slow head;while(fast!nullfast.next!null){slow slow.next;fast fast.next.next;}return slow;}
}