题意:
给一个单链表,将所有奇数号的结点连起来,再把偶数号的结点连起来,连在后面。
分析:
本来的想法是一直遍历链表。拆一个奇数结点到奇数链表,再拆一个偶数结点到偶数链表,但是这样超了空间。从而去想,能不能针对链表本身去改连。画图!
链表最重要的就是画图,弄清楚过程。其次有几个要点,动态更新的时候要保证结点能找到,要记录需要的头结点等问题。至于用代码表述画图的过程很简单:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode oddEvenList(ListNode head) {
ListNode odd;
ListNode even;
ListNode evenhead;
if(head == null){
return null;
}
odd = head;
even = head.next;
evenhead = even;
while(even!= null && even.next!=null){
odd.next = odd.next.next;
even.next = even.next.next;
odd = odd.next;
even = even.next;
}
odd.next = evenhead;
return head;
}
}