408王道数据结构课后代码习题(XII)

简介: 408王道数据结构课后代码习题(XII)

10


image.png


  • 遍历,设一个变量查看奇偶,分别插入
  • 保持相对顺序不变,采用尾插法
  • 时间复杂度O(n),空间复杂度O(1)


void splitList(LinkList L, LinkList &A, LinkList &B) {
  // 1.创建工作指针
  LNode *p = L->next, *pa = A, *pb = B;
  int i = 1;
  while (p != NULL) {
    // 2.采用尾插法分别插入
    if (i % 2 != 0) {
      pa->next = p;
      pa = p;
    } else {
      pb->next = p;
      pb = p;
    }
    p = p->next;    // 继续处理
    i++;
  }
  // 3.最后设为空
  pa->next = NULL;
  pb->next = NULL;
}
复制代码


  • 当然你也可以不使用变量记录奇偶,一次循环处理两个就可以了


void splitList2(LinkList L, LinkList &A, LinkList &B) {
  // 1.创建工作指针
  LNode *p = L->next, *pa = A, *pb = B;
  while (p != NULL) {
    // 2.采用尾插法分别插入
    pa->next = p;
    pa = p;
    p = p->next;    // 继续处理
    if (p != NULL) {
      pb->next = p;
      pb = p;
      p = p->next;    // 继续处理
    } 
  }
  // 3.最后设为空
  pa->next = NULL;
  pb->next = NULL;
}
复制代码


11

image.png


  • 与上一题类似,不过在插入B时需要采用头插法使其逆序
  • 头插时要注意记录后继元素,防止断链
  • 就地算法,时间复杂度O(n),空间复杂度O(1)


void splitList(LinkList L, LinkList &A, LinkList &B) {
  // 1.创建工作指针
  LNode *p = L->next, *pa = A;
  int i = 1;
  while (p != NULL) {
    // 2.分别采用头插法和尾插法插入
    if (i % 2 != 0) {
      pa->next = p;
      pa = p;
      p = p->next;
    } else {
      LNode *q = p->next;   // 记录p的后继防止断链
      p->next = B->next;
      B->next = p;
      p = q;
    }
    i++;
  }
  // 3.收尾
  pa->next = NULL;
}
复制代码


  • 同上也可以不使用变量记录奇偶


void splitList2(LinkList L, LinkList &A, LinkList &B) {
  // 1.创建工作指针
  LNode *p = L->next, *pa = A;
  while (p != NULL) {
    // 2.分别采用头插法和尾插法插入
    pa->next = p;
    pa = p;
    p = p->next;
    if (p != NULL) {
      LNode *q = p->next;   // 记录p的后继防止断链
      p->next = B->next;
      B->next = p;
      p = q;
    }
  }
  // 3.收尾
  pa->next = NULL;
}


目录
相关文章
|
2天前
|
Go 索引
掌握Go语言:Go语言范围,优雅遍历数据结构,简化代码操作实战解析(24)
掌握Go语言:Go语言范围,优雅遍历数据结构,简化代码操作实战解析(24)
|
2天前
|
存储 编译器 C语言
【数据结构】C语言实现链队列(附完整运行代码)
【数据结构】C语言实现链队列(附完整运行代码)
43 0
|
2天前
|
存储 编译器 C语言
【数据结构】C语言实现带头双向循环链表万字详解(附完整运行代码)
【数据结构】C语言实现带头双向循环链表万字详解(附完整运行代码)
11 0
|
2天前
|
存储 算法 分布式数据库
数据结构第五课 -----二叉树的代码实现
数据结构第五课 -----二叉树的代码实现
|
2天前
|
存储
数据结构基础:一篇文章教你单链表(头插,尾插,查找,头删等的解析和代码)
数据结构基础:一篇文章教你单链表(头插,尾插,查找,头删等的解析和代码)
|
2天前
|
存储 算法 C语言
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
|
2天前
|
算法 调度 C++
[数据结构与算法]贪心算法(原理+代码)
[数据结构与算法]贪心算法(原理+代码)
|
2天前
|
存储 算法 编译器
【数据结构】C语言实现链式二叉树(附完整运行代码)
【数据结构】C语言实现链式二叉树(附完整运行代码)
38 1
|
2天前
|
存储 程序员 编译器
【数据结构】C语言实现堆(附完整运行代码)
【数据结构】C语言实现堆(附完整运行代码)
31 0
|
2天前
|
存储 编译器 C语言
【数据结构】C语言实现顺序栈(附完整运行代码)
【数据结构】C语言实现顺序栈(附完整运行代码)
37 0