Problem
LeetCode 328. Odd Even Linked List
1. 题目简述
给出一个链表,将所有奇数个节点串起来,然后接上所有偶数位的节点。这里说的是节点的index而不是节点的value。例如:
Example 1:
Input: 1->2->3->4->5->NULL
Output: 1->3->5->2->4->NULL
2. 算法思路
链表+双指针
这道题不知道为什么划分到medium中,相当于将链表重新排序。这里要用到两个指针,一个指向当前odd的结尾,一个指向even的结尾,注意赋值顺序即可。
3. 解法
注意推导,过程,算法本身并不难
/**
* 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 odd = head, even = head.next;
while (even != null && even.next != null) {
ListNode odd_next_node = even.next;
ListNode even_next_node = odd_next_node.next;
ListNode even_start_node = odd.next;
odd.next = odd_next_node;
odd = odd.next;
even.next = even_next_node;
even = even.next;
odd.next = even_start_node;
}
return head;
}
}