题目:
给定一个单链表,请设定一个函数,讲链表的奇数位节点和偶数位节点分别放在一起,重排后输出。
注意是节点的编号而非节点的数值。
解答:
- 首先我们将第一个奇数节点(也就是头节点)的地址存起来,然后将所有奇数节点按照原有次序链接起来。
- 其次把第一个偶数节点(第二个节点)的地址存起来,然后将所有的偶数节点按照原有次序链接起来。
- 最后将偶数的第一个节点(此时应是被保存起来的偶数节点),链接在奇数的最后一个节点后面。然后返回被保存的头节点。
class Solution { public ListNode oddEvenList(ListNode head) { if (head == null || head.next == null) { return head; } //保存头节点 ListNode dummyHead = head; ListNode node = head.next; //保存第一个偶数节点 ListNode nextNode = head.next; while (node != null && node.next != null) { //依次将奇数节点链接起来 head.next = head.next.next; head = head.next; //依次将偶数节点链接起来 node.next = node.next.next; node = node.next; } //将第一个偶数节点链接到最后一个奇数节点的后面 head.next = nextNode; return dummyHead; } }