35.奇偶鏈表

題目:給定一個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裏的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。

解析:
①新建兩個鏈表結點p1和p2分別連接單鏈表中奇數結點和偶數結點;
②定義計數count,遍歷鏈表,如果當前結點計數count爲奇數,將該節點連接到p1後,如果該當前結點計數爲偶數,將該節點連接到p2後;
③鏈表遍歷完成後,p1和p2後分別掛着奇數結點和偶數結點;
④將p1的末結點接上p2後的偶數結點。

public ListNode oddEvenList(ListNode head) {
   if (head==null||head.next==null||head.next.next==null)
    return head;
   ListNode p1 = new ListNode(-1);//存儲奇數結點
   ListNode p2 = new ListNode(-1);//存儲偶數結點
   ListNode tmp1 = p1, tmp2 = p2;
   //遍歷鏈表
   int count = 0;
   while(head != null){
    ++count;//結點的奇偶計數
    if(count%2 != 0){
     //如果是奇數結點,將結點掛在p1後面
     p1.next = head;
     p1 = p1.next;
    }else{
     //如果是偶數結點,將結點掛在p2後面
     p2.next = head;
     p2 = p2.next;
    }
    head = head.next;
   }
    //遍歷完成後p1上奇數結點的末節點掛上p2上的偶數頭結點
   p1.next = tmp2.next;
    //將p2上的偶數末尾節點的next指針賦值null
   p2.next = null;
   return tmp1.next;
  }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章