半年闭关经磨难,此次出关处处卷
不知大佬言什么,只觉此行似梦魇
本是人间一粒尘,相见何不是个缘
缘起缘落本是欢,你却自认是神仙
题号:876
//遍历拿到中点
//二次遍历找到中点
//一般不会让我们这么干
var middleNode = function (head) {
if (head.next == null || head == null) {
return head
}
let count = 0
let begin = head
while (begin) {
count++
begin = begin.next
}
begin = head
let mid = count % 2 == 0 ? count / 2 : (count - 1) / 2
do {
mid--
begin = begin.next
} while (mid > 0)
return begin
}
//快慢指针
var middleNode = function (head) {
let fast = head, slow = head
while (fast.next && fast.next.next) {
slow = slow.next
fast = fast.next.next
}
if (fast.next) {
//偶数
return slow.next
}
//奇数
return slow
}
题号:234
var isPalindrome = function (head) {
let helper = (node) => {
if (node == null) {
return true
}
let result = helper(node.next)
result = result && (node.val == head.val)
head = head.next
return result
}
return helper(head)
};
var isPalindrome = function (head) {
if (head == null || head.next == null) {
return true
}
let fast = head, slow = head, stack = []
stack.push(slow)
while (fast.next && fast.next.next) {
slow = slow.next
fast = fast.next.next
stack.push(slow)
}
let next = null
if (fast.next) {
next = slow.next
} else {
next = slow
}
while (stack.length != 0) {
let ele = stack.pop()
if (next.val != ele.val) {
return false
}
next = next.next
}
return true
};
题号:剑指 Offer 24
//利用递归
var reverseList = function (head) {
let dummy = null
let helper = (node) => {
if (node == null) {
dummy = new ListNode()
return dummy
}
let preNode = helper(node.next)
preNode.next = node
node.next = null
return node
}
helper(head)
return dummy.next
}