C语言链表:高效交换奇偶元素位置

本篇文章将介绍如何使用C语言实现一个算法,高效地将链表中所有奇数元素与其后的第一个偶数元素进行位置交换。

代码示例:

while (p != head) { 
    r = p->next;
    while (r != head) {
        if (p->elem % 2 != 0 && r->elem % 2 == 0) { // 左边第一个结点为奇数,发现偶数时,交换
            Swap(r, p);
            break;
        }
        r = r->next;
    }
    p = p->next;
}

代码解析:

  1. while (p != head): 使用循环遍历链表,直到指针 p 指向头结点为止。
  2. r = p->next;: 将指针 r 指向 p 的下一个结点。
  3. while (r != head): 使用嵌套循环遍历 r 指针,直到 r 指向头结点。
  4. if (p->elem % 2 != 0 && r->elem % 2 == 0): 判断 p 指向的元素是否为奇数,r 指向的元素是否为偶数。
  5. Swap(r, p);: 如果条件满足,调用 Swap 函数交换 rp 指向的结点的位置,即将偶数元素移到奇数元素之前。
  6. break;: 交换完成后,跳出内层循环。
  7. r = r->next;: 将 r 指向下一个结点,继续下一轮循环。
  8. p = p->next;: 将 p 指向下一个结点,继续外层循环。

总结:

通过上述代码的执行,可以高效地将链表中所有奇数元素与其后的第一个偶数元素进行位置交换。该算法的时间复杂度为 O(n),其中 n 为链表的长度。

注意:

  • 代码中的 Swap 函数需要根据具体的链表结构进行实现。
  • 该算法假设链表中至少存在一对奇偶元素,否则不会进行任何操作。

原文地址: https://www.cveoy.top/t/topic/kLm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录