mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-11 04:54:51 +08:00
feat: 新增0234ts代码块
This commit is contained in:
@ -319,6 +319,74 @@ var isPalindrome = function(head) {
|
|||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
function isPalindrome(head: ListNode | null): boolean {
|
||||||
|
// 方法1:利用栈结构 将所有元素添加到栈中
|
||||||
|
// 声明栈
|
||||||
|
let stack:number[] = []
|
||||||
|
|
||||||
|
// 保存一份头结点 后续需要移动头结点
|
||||||
|
let dummy:ListNode = head
|
||||||
|
|
||||||
|
// 遍历链表将所有元素添加到数栈中
|
||||||
|
while(dummy){
|
||||||
|
stack.push(dummy.val)
|
||||||
|
dummy = dummy.next
|
||||||
|
}
|
||||||
|
|
||||||
|
// 利用栈结构的先进先出后出的特性判断是否会文
|
||||||
|
while(head){
|
||||||
|
if(head.val!== stack.pop()) return false
|
||||||
|
head = head.next
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
|
||||||
|
// 方法2:翻转后半部分链表
|
||||||
|
// 封装翻转链表函数
|
||||||
|
function reverseList(node:ListNode){
|
||||||
|
let pre:ListNode = null
|
||||||
|
while(node){
|
||||||
|
// 借助第三个变量 进行翻转 有疑问可以看链表篇(https://www.programmercarl.com/链表理论基础.html#单链表)
|
||||||
|
let temp:ListNode = node.next
|
||||||
|
node.next = pre
|
||||||
|
pre = node
|
||||||
|
node = temp
|
||||||
|
}
|
||||||
|
return pre
|
||||||
|
}
|
||||||
|
|
||||||
|
// 快慢指针 需要注意的我们需要保证slow指针指向在要分隔节点的上一个节点,因为是单链表,无法找到链表前面的节点(也可以使用js代码的方法,新增个变量用去记录前一个节点)
|
||||||
|
let fast:ListNode = head.next
|
||||||
|
let slow:ListNode = head
|
||||||
|
while(fast){
|
||||||
|
fast = fast.next
|
||||||
|
//只有fast有值的情况下才继续移动 不然代码会出现异常
|
||||||
|
if(fast) {
|
||||||
|
fast = fast.next
|
||||||
|
slow = slow.next
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分隔链表
|
||||||
|
let list2Head:ListNode = slow.next
|
||||||
|
// 断开slow节点的next指针
|
||||||
|
slow.next = null
|
||||||
|
// 将后半部分进行翻转
|
||||||
|
let list2 = reverseList(list2Head)
|
||||||
|
|
||||||
|
// 最后进行迭代对比节点的值即可
|
||||||
|
while(head && list2){
|
||||||
|
if(head.val != list2.val) return false
|
||||||
|
head = head.next
|
||||||
|
list2 = list2.next
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
};
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
|
Reference in New Issue
Block a user