奇偶链表

给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,

而不是节点的值的奇偶性。

示例 1:
  输入: 1->2->3->4->5->NULL
  输出: 1->3->5->2->4->NULL
示例 2:
  输入: 2->1->3->5->6->4->7->NULL
  输出: 2->3->6->7->1->5->4->NULL

思路:定义三个指针cur,f , s,分别指向头结点,第二个结点,第三个结点,将s结点插入到cur和f结点中间,然后cur指向cur.next,f指向f.next,此时判断f是否为空,为空直接返回,不为空,让s指向f的下一个结点,继续进行循环

代码如下:

public ListNode oddEvenList(ListNode head) {
        if(head == null || head.next == null) return head;
        //cur,f,s分别指向第一个,第二个,第三个结点
        ListNode cur = head;
        ListNode f = cur.next;
        ListNode s = f.next;
        while(s!=null){
            f.next = s.next;
            s.next = cur.next;
            cur.next = s;
            cur = cur.next;
            f = f.next;
            //这块一定要判断
            if(f == null) break;
            s = f.next;
        }
        return head;
    }
原文地址:https://www.cnblogs.com/du001011/p/10646522.html