拆分奇偶链表(前提条件,链表单调且连续,并且节点个数为偶数个)
拆分奇偶链表的过程必须在一次遍历链表的过程中完成;
原因是如果想先拆分奇数链表,再拆分偶数链表;在拆分奇数链表结束后,原链表的结构已经发生变化;所以在拆分偶数链表时无法使用之前的链表结构;
所以拆分奇偶链表的过程必须在一次遍历链表的过程中完成; 代码如下:
// 拆分奇偶链表(前提是保证链表升序,而且数值连续,比如:1,2,3,4,5,6,7,8)
public static ListNode[] splitUpListNode(ListNode head){
ListNode odd = head; // 奇数链表
ListNode even =head.next; // 偶数链表
ListNode tempOdd =odd;
ListNode tempEven = even;
while(tempEven !=null){
// 偶数链表没有到达结尾位置
if(tempEven.next !=null){
// 让奇数链表节点指向偶数链表节点的下一个
tempOdd.next=tempEven.next;
// 奇数链表节点来到刚刚指向的节点位置
tempOdd=tempOdd.next;
// 偶数链表节点指向奇数链表节点的下一个位置
tempEven.next=tempOdd.next;
// 偶数链表节点来到刚刚指向的节点位置
tempEven=tempEven.next;
}else{ //偶数链表节点到达结尾位置
tempOdd.next=null; // 让奇数链表指向null;
tempEven.next=null; // 偶数链表指向null;
break; // 退出循环
}
}
return new ListNode[]{odd,even}; // 得到拆分后的奇偶链表
}
结果如下: