你们好,我是灵魂画师--茄子。技术水平通常,喜欢画画。优化
开始今天的正题。指针
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。code
若是有两个中间结点,则返回第二个中间结点。对象
leetCode876.链表的中间结点leetcode
示例 1:get
输入:[1,2,3,4,5]
输出:此列表中的结点 3 (序列化形式:[3,4,5])
返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。
注意,咱们返回了一个 ListNode 类型的对象 ans,这样:
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = NULL.io
示例 2:console
输入:[1,2,3,4,5,6]
输出:此列表中的结点 4 (序列化形式:[4,5,6])
因为该列表有两个中间结点,值分别为 3 和 4,咱们返回第二个结点。function
题解:class
let middleNode = function(head) { let count = 0; let p = head; while(p != null){ count++; p = p.next; } console.log(count) count = Math.floor(count/2) while(count !== 0){ console.log(head,count) count --; head = head.next; } return head; };
// 第一种写法 let middleNode = function(head) { let pre = head; let cur = head; while(pre != null){ if(pre.next != null){ pre = pre.next.next; cur = cur.next; } else { pre = pre.next; } } return cur; }; // 第二种写法(代码优化) let middleNode = function(head) { let pre = head; let cur = head; while(pre != null && pre.next !=null){ pre = pre.next.next; cur = cur.next; } return cur; };
以上就是个人思路以及解法了,但愿你们喜欢我画的图解,我会继续努力的ヾ(◍°∇°◍)ノ゙。(点个赞把我带走吧~~)