题解 | #链表的奇偶重排#
链表的奇偶重排
https://www.nowcoder.com/practice/02bf49ea45cd486daa031614f9bd6fc3
注意:
结束时要确保偶数链表最后一个节点的 next 指向 null,防止形成环
even.next = null;
{1,3,4,6,7},这种奇数数量的就会形成环
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ public ListNode oddEvenList (ListNode head) { // write code here while (head == null || head.next == null) { return head; } ListNode oddDummy = new ListNode(0); // 存放奇数节点的虚拟头节点 ListNode evenDummy = new ListNode(0); // 存放偶数节点的虚拟头节点 ListNode odd = oddDummy, even = evenDummy; // 奇偶指针初始化 ListNode current = head; // 当前遍历的节点 int i = 1; // 用于区分奇偶 // 遍历链表,并按奇偶位置分配 while (current != null) { if (i % 2 == 1) { odd.next = current; odd = odd.next; } else { even.next = current; even = even.next; } current = current.next; i++; } // 结束时要确保偶数链表最后一个节点的 next 指向 null,防止形成环 even.next = null; odd.next = evenDummy.next; // 返回奇数节点链表的头节点 return oddDummy.next; } }