剑指 Offer 52. 两个链表的第一个公共节点
双指针,当两个链表有公共节点时,他们一定会同时指向其公共节点,他们走的路是一样的,都走了a+b+c;如果没有公共结点,会同时指向null,因为他们是同步变化的,他们走的路始终一样
var getIntersectionNode = function(headA, headB) {
if(headA===null || headB===null){
return null
}
let nodeA=headA,nodeB=headB
while(nodeA!==nodeB){
nodeA=nodeA===null?headB:nodeA.next
nodeB=nodeB===null?headA:nodeB.next
}
return nodeB
};
剑指 Offer II 024. 反转链表
var reverseList = function(head) {
let temp=head,pre=null,cur=null
while(temp){
cur=temp.next
temp.next=pre
pre=temp
temp=cur
}
return pre
};
剑指 Offer II 027. 回文链表
先放到数组中,再利用双指针
var isPalindrome = function(head) {
let node=head
let arr=[]
while(node){
arr.push(node.val)
node=node.next
}
let l=0,r=arr.length-1
while(l<r){
if(arr[l]!==arr[r]){
return false
}
l++
r--
}
return true
};
面试题 02.01. 移除重复节点
var removeDuplicateNodes = function(head) {
if(head===null){return head}
let node=head
let cur=head.next
let arr=[head.val]
while(cur){
if(arr.indexOf(cur.val)===-1){
arr.push(cur.val)
node=node.next
cur=cur.next
}
else{
node.next=cur.next
cur=cur.next
}
}
return head
};