找到了個不錯的提綱,做了些反轉鍊錶的題目
迴圈和遞迴,以下三段分別為定義,迴圈,遞迴 1,遞迴 2
function
listbode
(val)
function
reverselist
= head =>
return pre
}
function
reverselist
= head =>
function
reverselist
= head =>
return
help
(head)
}
同樣分別使用迴圈和遞迴:
function
partreverselist
=(head, m, n)
=>
start = p;
pre = tail = p.next;
cur = pre.next;
while
(count)
start.next = pre
tail.next = cur
return dummy.next
}
function
partreverselist
=(head, m, n)
=>
let p = dummy =
newlistnode()
p.next = head
let start, end, front, tail;
for(i =
0; i1; i++
) front = p
start = p.next
for(i = m-
1; i) end = p
tail = p.next
end.next =
null
front.next =
help
(start)
start.next = tail
return dummy.next
}
同樣使用迴圈和遞迴兩種方式來做
function
twochange
(head)
return dummy.next
}
function
twochange
(head)
使用集合 || 使用雙指標
function
circle
(head)
return
false
;}
function
circle
(head)
}return
false
;}
同樣有兩種方式,迴圈和遞迴,由於遞迴較為簡單,所以放在前面
function
merge
(l1, l2)
else
}
function
merge
(l1, l2)
else}if
(l1) p.next = l1;
else p.next = l2;
return dummy.next;
}
分別使用陣列和找鍊錶中點並反轉的方式來實現
function
ispalindrome
(head)
let str1 = res.
join(""
),str2 = res.
reverse()
.join(""
);return str1 === str2;
}
function
ispalindrome
(head)
;let dummy =
(slow = fast =
newlistnode()
);dummy.next = head;
while
(fast && fast.next)
let next = slow.next;
slow.next =
null
;let newstart =
reverse
(next)
;for
(let p = head, newp = newstart; newp; p = p.next, newp = newp.next)
}return
true
;}
常見的鍊錶題目
一些常見的單鏈表題目,總結思路和實現 1.單鏈表的反序 2.給單鏈表建環 3.檢測單鏈表是否有環 4.給單鏈表解環 5.檢測兩條鍊錶是否相交 6.不輸入頭節點,刪除單鏈表的指定節點 只給定待刪除節點指標 1.單鏈表的反序 view plain 逆轉鍊錶,並返回逆轉後的頭節點 node reverse...
常見的鍊錶題目
分類 演算法 資料結構 一些常見的單鏈表題目,總結思路和實現 1.單鏈表的反序 2.給單鏈表建環 3.檢測單鏈表是否有環 4.給單鏈表解環 5.檢測兩條鍊錶是否相交 6.不輸入頭節點,刪除單鏈表的指定節點 只給定待刪除節點指標 1.單鏈表的反序 view plain 逆轉鍊錶,並返回逆轉後的頭節點 ...
常見的鍊錶題目
一些常見的單鏈表題目,總結思路和實現 1.單鏈表的反序 2.給單鏈表建環 3.檢測單鏈表是否有環 4.給單鏈表解環 5.檢測兩條鍊錶是否相交 6.不輸入頭節點,刪除單鏈表的指定節點 只給定待刪除節點指標 1.單鏈表的反序 逆轉鍊錶,並返回逆轉後的頭節點 node reverse node head ...