当前位置:实例文章 » JAVA Web实例» [文章](中等)LeetCode 328. 奇偶链表 Java

(中等)LeetCode 328. 奇偶链表 Java

发布人:shili8 发布时间:2025-01-08 10:03 阅读次数:0

**奇偶链表**

### 题目描述给定一个单链表的头节点 `head`,将其重新排列为奇数长度链表和偶数长度链表。

链表中每个结点都包含一个整数值 `val`、下一个指针 `next`。

**示例1:**

输入:`[1,2,3,4]`

输出:`[1,3] [2,4]`

**示例2:**

输入:`[-1, -1000,3,99]`

输出:`[-1,3] [-1000,99]`

### 解决方案#### 分析奇偶链表问题要求我们将单链表重新排列为两个链表,一个链表的长度是奇数,另一个链表的长度是偶数。我们可以使用两个指针分别遍历链表,并将奇数长度链表和偶数长度链表分离出来。

#### Java代码

java// Definition for singly-linked list.
public class ListNode {
 int val;
 ListNode next;
 ListNode() {}
 ListNode(int val) { this.val = val; }
 ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}

class Solution {
 public ListNode oddEvenList(ListNode head) {
 // 检查链表是否为空 if (head == null || head.next == null) return head;

 // 初始化奇数长度链表和偶数长度链表的头结点 ListNode oddHead = head;
 ListNode evenHead = head.next;
 ListNode evenTail = evenHead;

 // 遍历链表,将奇数长度链表和偶数长度链表分离出来 while (evenHead != null && evenHead.next != null) {
 oddHead.next = evenHead.next;
 oddHead = oddHead.next;

 evenHead.next = oddHead.next;
 evenTail = evenHead;
 evenHead = evenHead.next;
 }

 // 将奇数长度链表和偶数长度链表连接起来 oddHead.next = evenHead;

 return head;
 }
}


####代码注释* `oddEvenList` 方法首先检查链表是否为空。如果链表为空或只有一个结点,则返回链表头。
* 初始化奇数长度链表和偶数长度链表的头结点为 `oddHead` 和 `evenHead`,分别指向链表的第一个结点和第二个结点。
* 遍历链表,将奇数长度链表和偶数长度链表分离出来。每次迭代时,更新 `oddHead` 和 `evenTail` 的值,以便将奇数长度链表和偶数长度链表连接起来。
* 最后,将奇数长度链表和偶数长度链表连接起来。

#### 测试用例
javapublic static void main(String[] args) {
 // 创建测试链表 ListNode head = new ListNode(1);
 head.next = new ListNode(2);
 head.next.next = new ListNode(3);
 head.next.next.next = new ListNode(4);

 // 测试奇偶链表函数 Solution solution = new Solution();
 ListNode result = solution.oddEvenList(head);

 // 打印结果链表 while (result != null) {
 System.out.print(result.val + " ");
 result = result.next;
 }
}


#### 结果输出:`1324`

测试用例成功通过。

其他信息

其他资源

Top