leetcode-328-奇偶链表(odd even linkedlist)-java

版权声明:此文章为许诗宇所写,如需转载,请写下转载文章的地址 https://blog.csdn.net/xushiyu1996818/article/details/83990426

题目及测试

package pid328;
/*  奇偶链表

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

请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。

示例 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

说明:

    应当保持奇数节点和偶数节点的相对顺序。
    链表的第一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。




*/
public class main {
	
public static void main(String[] args) {
		
		LinkList a=new LinkList(1);
		a.addLast(2);
		a.addLast(3);
		a.addLast(4);
		a.addLast(5);
		a.printList();
		test(a.first);
		
		LinkList b=new LinkList(5);
		b.addLast(6);
		b.addLast(4);
		b.addLast(2);
		b.addLast(1);
		b.addLast(3);
		b.printList();
		test(b.first);		
		/*
		LinkList c=new LinkList(1);
		c.addLast(2);
		c.addLast(2);
		c.addLast(1);
		c.printList();
		//test(c.first);
		
		
		LinkList d=new LinkList(1);
		d.addLast(2);
		d.addLast(3);
		
		c.printList();		
		d.printList();
		test(c.first,d.first);*/
	}
		 
	private static void test(ListNode ito) {
		Solution solution = new Solution();
		ListNode rtn;
		long begin = System.currentTimeMillis();
		System.out.println();
		//开始时打印数组
		
		rtn=solution.oddEvenList(ito);//执行程序
		long end = System.currentTimeMillis();	
		System.out.println("rtn=");
		rtn.printNodeToEnd();
		
		//System.out.println(":rtn" );
		//System.out.print(rtn);
		System.out.println();
		System.out.println("耗时:" + (end - begin) + "ms");
		System.out.println("-------------------");
	}

}

解法1(成功,4ms,超快)

  双指针,设置奇数的头尾,偶数的头尾,在一次遍历中,如果该为奇数位,则奇数的尾.next=now,偶数亦然,最后奇数尾.next=偶数头,偶数尾.next=null

package pid328;

import java.math.BigInteger;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue;
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode oddEvenList(ListNode head) {
        if(head==null||head.next==null){
        	return head;
        }
        ListNode evenHead=head.next;
        ListNode oddTail=head;
        ListNode evenTail=evenHead;
        ListNode now=evenHead.next;
        boolean isOdd=true;
        while(now!=null){
        	if(isOdd){
        		oddTail.next=now;
        		oddTail=oddTail.next;
        		isOdd=false;
        		
        	}
        	else{
        		evenTail.next=now;
        		evenTail=evenTail.next;
        		isOdd=true;
        		
        	}
        	now=now.next;      	
        }
    	oddTail.next=evenHead;  
    	evenTail.next=null;
    	return head;
    }
}

猜你喜欢

转载自blog.csdn.net/xushiyu1996818/article/details/83990426