Leetcode328.奇偶链表(C语言)
数据结构-链表:算法与数据结构参考
题目:
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。
(奇数节点和偶数节点指的是节点编号 的奇偶性)
请用原地算法完成。空间复杂度 O(1),时间复杂度O(nodes),nodes 为节点总数。例 :
输入: 2->1->3->5->6->4->7->NULL
输出: 2->3->6->7->1->5->4->NULL
思路:
用一个链表存储奇数节点,一个存储偶数节点;
最后将偶数链表接在奇数链表后
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* oddEvenList(struct ListNode* head){
if(!head || !head->next || !head->next->next) return head;
struct ListNode *odd=head,*even=head->next,*evenhead=even;
while(even!=NULL && even->next!=NULL){ //偶数在后,只需用偶数判断是否到原链表结尾即可
odd->next=odd->next->next;
odd=odd->next; //奇数链表
even->next=even->next->next;
even=even->next; //偶数链表
}
odd->next=evenhead; //奇偶链表相连
return head;
}