数据结构与算法之奇偶链表

奇偶链表

题目

原题:328. 奇偶链表 - 力扣(LeetCode)

给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。第一个节点的索引被认为是 奇数,第二个节点的索引为 偶数,以此类推。

想法

双指针法 (交替):

  1. 设置一个偶数指针 even,一个奇数指针 odd,以及记录偶数的头指针也就是初始化的 event,这里记为 eHead
  2. 偶数指针的 next 结点为奇数指针的 next 结点,奇数指针的 next 节点为偶数指针的 next 节点
  3. 合并,令奇数链最后一个结点的 next 指向之前记录的偶数链的头指针 eHead

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* oddEvenList(struct ListNode* head){
    if(head==NULL||head->next==NULL){
        return head;
    }
    struct ListNode* odd=head;
    struct ListNode* even=head->next;
    struct ListNode* eHead=even;
    while(even&&even->next){
        odd->next=even->next;
        odd=odd->next;
        even->next=odd->next;
        even=even->next;
    }
    odd->next=eHead;
    return head;
}

猜你喜欢

转载自blog.csdn.net/qq_45074341/article/details/126378770
今日推荐