328OddEvenLinkedList

题意:输入单链表,按照节点的奇数序和偶数序分组,先奇后偶,要去空间复杂度O(1),时间复杂度O(n),n为单链表中的节点数,同一组中的先对顺序不变

思路:顺次扫面(next),依次将串到奇数序列、偶数序列,最后将偶数序列的首部串到奇数序列的尾部,注意将偶数序列的尾部置null,否则当节点个数是奇数个时会出现死循环,导致空间溢出。

    public ListNode oddEvenList(ListNode head) {
        if(head == null || head.next == null)
        	return head;
        ListNode evenHead = head.next, evenlast = evenHead, next = evenHead.next;
        ListNode oddLast = head, tp;
        boolean flag = true; //odd : true; even : false
        while(next != null){
        	 if(flag){
        		 oddLast.next = next;
        		 oddLast = next;
        	 }else{
        		evenlast.next = next;
        		evenlast = next;
        	 }
        	 flag = !flag;
        	 next = next.next; 
        }
        oddLast.next = evenHead;
        evenlast.next = null;
    	return head;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值