328.奇偶链表
Posted szzla
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了328.奇偶链表相关的知识,希望对你有一定的参考价值。
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。
请尝试使用原地算法完成。你的算法的空间复杂度应为 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
说明:
- 应当保持奇数节点和偶数节点的相对顺序。
- 链表的第一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。
解题思路:用head和odd指针维护奇链表,用evenhead和even指针维护偶链表。
当然偶链表的evenhead我们可以把它设为一个结点(1)或者一个指针指向首结点(2)。都行,差别不大。
1.
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 class Solution { 10 public ListNode oddEvenList(ListNode head) { 11 if(head==null) return null; 12 ListNode evenhead=new ListNode(); 13 evenhead.next=head.next; 14 ListNode odd=head; 15 ListNode even=evenhead.next; 16 while(even!=null&&even.next!=null){ 17 odd.next=even.next; 18 odd=even.next; 19 even.next=odd.next; 20 even=odd.next; 21 } 22 odd.next=evenhead.next; 23 return head; 24 } 25 }
2.
1 class Solution { 2 public ListNode oddEvenList(ListNode head) { 3 if(head==null) return null; 4 ListNode ood=head; 5 ListNode even=head.next; 6 ListNode evenhead=even; 7 while(even!=null&&even.next!=null){ 8 ood.next=even.next; 9 ood=ood.next; 10 even.next=ood.next; 11 even=even.next; 12 13 } 14 ood.next=evenhead; 15 return head; 16 } 17 }
以上是关于328.奇偶链表的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 328. 奇偶链表c++/java详细题解