双指针
:奇与偶节点链表 ,不断后移动
package CLinkedList;
/**
* @Author Zhou jian
* @Date 2020 ${month} 2020/4/11 0011 12:40
*/
public class Problem328 {
//抽取奇数与偶数链表
public ListNode oddEvenList(ListNode head) {
//判空
if(head==null||head.next==null) return head;
//奇数节点
ListNode oddNode = head;
//偶数节点
ListNode envenNode = head.next;
//奇数偶数节点的哑巴节点
ListNode dummyOdd = new ListNode(-1);
dummyOdd.next=oddNode;
ListNode dummyEnven = new ListNode(-1);
dummyEnven.next=envenNode;
//不断添加:更新接单
while(envenNode!=null&&envenNode.next!=null){
//两个指针一次遍历进行链表的更新
oddNode.next=envenNode.next;
oddNode=oddNode.next;
envenNode.next=oddNode.next;
envenNode=envenNode.next;
}
//奇数节点的下一个节点为偶数接地那
oddNode.next=dummyEnven.next;
//返回奇数接地那
return dummyOdd.next;
}
}
8/15
package August.Dpointers;
/**
* @Author Zhou jian
* @Date 2020 ${month} 2020/8/15 0015 10:46
* 奇偶链表
*/
public class Problem328 {
// 奇偶链表
// 遍历整个链表
public ListNode oddEvenList(ListNode head) {
if(head==null&&head.next==null) return head;
ListNode oddList = head;
ListNode evenList = head.next;
ListNode evenEnd = evenList;
ListNode oddEnd = oddList;
ListNode cur = head.next.next;
oddEnd.next = null;
evenEnd.next = null;
ListNode next;
boolean flag = true;
while (cur!=null){
next = cur.next;
if(flag){
oddEnd.next = cur;
oddEnd = cur;
oddEnd.next=null;
}else{
evenEnd.next = cur;
evenEnd = cur;
evenEnd.next=null;
}
flag = !flag;
cur = next;
}
oddEnd.next = evenList;
return oddList;
}
public static void main(String[] args) {
ListNode head1 = new ListNode(1);
ListNode A1 = new ListNode(2);
ListNode B1 = new ListNode(3);
ListNode C1 = new ListNode(4);
head1.next = A1;
A1.next = B1;
// B1.next = C1;
Problem328 problem328 = new Problem328();
ListNode listNode = problem328.oddEvenList(head1);
System.out.println(listNode);
boolean flag = true;
System.out.println(!flag);
}
}