原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-medium/xvdwtj/
解法一:
/**
* 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) {
return null;
}
ListNode oddNodeCurr = head;
ListNode oddNodeHead = oddNodeCurr;
ListNode evenNodeCurr = head.next;
ListNode evenNodeHead = evenNodeCurr;
while (evenNodeCurr != null && evenNodeCurr.next != null) {
oddNodeCurr.next = oddNodeCurr.next.next;
oddNodeCurr = oddNodeCurr.next;
evenNodeCurr.next = evenNodeCurr.next.next;
evenNodeCurr = evenNodeCurr.next;
}
oddNodeCurr.next = evenNodeHead;
return oddNodeHead;
}
}
思路:简单的来说就是将链表中的奇数节点和偶数节点才分出来,然后再将偶数节点链接到奇数节点后即可。怎么拆分,那就是循环遍历,注意遍历的时候循环的条件是偶数节点的当前节点和偶数节点的当前节点的下一个节点都不能为空。因为第一个节点总是奇数节点。如果只有一个节点,那么就不需要遍历链表了。
如图