题解 | #链表的奇偶重排#
链表的奇偶重排
https://www.nowcoder.com/practice/02bf49ea45cd486daa031614f9bd6fc3
、
/** * 13: 链表的奇偶重排 *给定一个单链表,请设定一个函数,将链表的奇数位节点和偶数位节点分别放在一起,重排后输出。 * 注意是节点的编号而非节点的数值。 * 解题思路:创建俩个额外的链表,分别用来存放奇数偶数,遍历完成后将俩个链表合并到一起 */
public ListNode oddEvenList (ListNode head) { if (head == null){ return null; } if (head.next == null){ return head; } ListNode p=head; int n=1;//用来判断是奇数偶数 ListNode Js=new ListNode(-1);//奇数链表 ListNode Os=new ListNode(-1);//偶数链表 ListNode cur = Js; ListNode cur1 = Os; while (p!=null){ if (n%2!=0){//如果是奇数的话,用尾插法插到奇数链表后 ListNode listNode = new ListNode(p.val); cur.next = listNode; cur=listNode; } else{//如果是偶数的话,用尾插法插到偶数链表后 ListNode listNode = new ListNode(p.val); cur1.next = listNode; cur1=listNode; } p=p.next; n++; } p=Js; //将俩个链表合并 while (p.next!=null){ p=p.next; } p.next=Os.next; return Js.next; }