var largestTriangleArea = function(points) {
let res=0,s=0
for(let i=0
for(let j=i+1
for(let k=j+1
s=Area(points[i][0],points[i][1],points[j][0],points[j][1],points[k][0],points[k][1])
res=res>s?res:s
}
}
}
return res
}
const Area=(x1,y1,x2,y2,x3,y3)=>{
return 0.5*Math.abs(x1*y2+x2*y3+x3*y1-x1*y3-x2*y1-x3*y2)
}
var simplifyPath = function(path) {
const paths=path.split('/')
const stack=[]
for(let i of paths){
if(i==='..'){
if(stack.length){
stack.pop()
}
}else if(i.length && i !=='.'){
stack.push(i)
}
}
return '/'+stack.join('/')
};
var flatten = function(root) {
if(!root)return
let stack=[]
let pre=null
stack.push(root)
while(stack.length){
const cur=stack.pop()
if(pre!==null){
pre.left=null
pre.right=cur
}
const left=cur.left,right=cur.right
if(right){
stack.push(right)
}
if(left){
stack.push(left)
}
pre=cur
}
};
var reorderList = function(head) {
if(!head.next)return head
let slow=head,fast=head.next
while(fast && fast.next){
slow=slow.next
fast=fast.next
if(fast.next){
fast=fast.next
}
}
//反转链表
let newhead=null,p=slow.next,q=null
slow.next=null
while(p){
q=p
p=p.next
q.next=newhead
newhead=q
}
//依次连接
let resultHead = new ListNode(0), now = resultHead, flag = true
slow = head, fast = newhead
while(slow || fast) {
// 通过 flag 控制现在插入 前半部分 还是 后半部分
if(flag) {
now.next = slow
slow = slow.next
} else {
now.next = fast
fast = fast.next
}
now = now.next
flag = !flag
}
return resultHead.next
}