题解 | #链表的奇偶重排#
链表的奇偶重排
https://www.nowcoder.com/practice/02bf49ea45cd486daa031614f9bd6fc3
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
public ListNode oddEvenList (ListNode head) {
ListNode odd = head;
ListNode even = head;
ListNode newHead = head;
ListNode cur = newHead;
if(head==null){return null;}
if (head.next != null) {
even = head.next;
}
else{return head;}
while (odd.next != null && odd.next.next != null) {
odd = odd.next.next;
cur.next = new ListNode(odd.val);
cur = cur.next;
}
while (even != null) {
cur.next = new ListNode(even.val);
if (even.next == null) {
return newHead;
}
even = even.next.next;
cur = cur.next;
}
return newHead;
}
}
思路其实很简单,做一个odd和even指针,将读取的数值存储到新建了的链表中即可。需要注意的是head==null;以及head.next==null;的情况;当然在写代码过程中我还犯了一个错,那就是不能之间判断odd.next.next!=null;这样一旦遇到odd.next==null;就会出现空指针报错了,必须改成odd.next!=null&&odd.next.next!=null;这样就可以避免之前的情况了。
查看16道真题和解析