Palindrome Linked List Solution (js解答)
2部分,第一部分为单向链表的反转,第二部分判断对称性,先上题目
单向链表的反转,步骤图
pre,next,head皆作为指针使用,指向相应的结点
function reverseNode(head: ListNode | null):ListNode | null{
let pre:ListNode | null = null;
let next:ListNode | null = null;
while(head != null){
next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}
对称性判断思路:
完整解题代码:
function isPalindrome(head: ListNode | null): boolean {
if(head == null) return true;
let fast:any = head;
let slow:any = head;
while(fast != null && fast.next != null){
slow = slow.next;
fast = fast.next.next;
}
if(fast != null){ //此步骤是为了处理链表结点个数为奇数时的情况,让slow再往后移一位
slow = slow.next;
}
slow = reverseNode(slow); //反转slow之后的结点
fast = head;
while(slow != null){
if(slow.val != fast.val){
console.log(slow,fast)
return false;
}else{
fast = fast.next;
slow = slow.next;
}
}
return true;
};
function reverseNode(head: ListNode | null):ListNode | null{
let pre:ListNode | null = null;
let next:ListNode | null = null;
while(head != null){
next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}
示意图比较潦草,看客海涵。
青春奋斗的日子,触摸理想的岁月!加油!