Day11 —— 回文链表 奇偶链表

📅 2026/7/2 1:15:18
Day11 —— 回文链表  奇偶链表
今天是第十一天递归这个东西是人能想出来的吗……一、回文链表题目给你一个单链表的头节点head请你判断该链表是否为回文链表。如果是返回true否则返回false。解法数组 双指针这道题最简单直接的思路就是把链表的值拷贝到一个数组里然后利用数组的索引从两端向中间对比完美契合回文的定义。虽然空间用了 O(n)但思路极其清晰先快速写对再说。public bool IsPalindrome(ListNode head) { if (head null) return true; Listint list new Listint(); var cur head; while (cur ! null) { list.Add(cur.val); cur cur.next; } int left 0, right list.Count - 1; while (left right) { if (list[left] ! list[right]) return false; left; right--; } return true; }那个最优的解法我不但想不到还理解不了……俺寻思了一个小时想问问这是人能想出的二、奇偶链表题目给定一个单链表把所有奇数位置的节点放在前面偶数位置的节点放在后面保持相对顺序不变。注意这里的奇偶是指节点的位置编号不是节点里的值。解法分离奇偶链表再合并思路就像把一条队伍按照奇偶位分成两队然后奇数队的队尾指向偶数队的队头。用两个指针分别维护奇数链表和偶数链表的尾部一次遍历搞定。public class Solution { public ListNode OddEvenList(ListNode head) { if (head null) return null; ListNode poi_1 head;//奇数 ListNode poi_0 head.next;//偶数 ListNode head_0 poi_0; while (poi_0 ! null poi_0.next ! null) { //奇数 poi_1.next poi_0.next; poi_1 poi_1.next; // 偶数 poi_0.next poi_1.next; poi_0 poi_0.next; } poi_1.next head_0; return head; } }希望明天能有一个算法虐我千百遍我待算法如初恋的心态嗷。