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

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

2.3.7, 3


image.png4


  • 经典递归,出口依旧是空结点
  • 利用递归栈反向输出结点值
  • 时间复杂度O(n),空间复杂度O(n)


void reversePrintList(LinkList L) {
  if (L == NULL) return;
  reversePrintList(L->next);
  cout << L->data << " ";
}
复制代码


  • 从头到尾遍历整个链表,用栈存储每个结点的值再输出即可
  • 时间复杂度O(n),空间复杂度O(n)


void reversePrintList2(LinkList L) {
  if (L == NULL) return;
  // 1.遍历存储
  stack<int> stack;
  while (L != NULL) {
    stack.push(L->data);
    L = L->next;
  }
  // 2.输出
  while (!stack.empty()) {
    cout << stack.top() << " ";
    stack.pop();
  }
}
复制代码


2.3.7, 4


image.png


  • 跟顺序表找最小值基本没差,只是需要加一个指针指向前缀便于删除
  • 定义双指针:p和前缀pre,同时定义minp和minpre指向当前最小结点
  • 时间复杂度O(n),空间复杂度O(1)


void delMin(LinkList &L) {
  // 1.定义指针
  LNode *pre = L, *p = pre->next;
  LNode *minpre = pre, *minp = p;
  // 2.找到最小值
  while (p != NULL) {
    if (p->data < minp->data) {
      minpre = pre;
      minp = p;
    }
    pre = p;
    p = p->next;
  }
  // 3.删除最小值
  minpre->next = minp->next;
  free(minp);
}
复制代码


2.3.7, 5

image.png


  • 就地逆置,对于带头结点的链表来说就是把头结点之后的结点按照头插法再插入
  • 还是双指针,这次需要p以及p的后缀(画图更容易理解)
  • 头插也就是说每次都把新的p插入到L后面!这样L依旧是头结点,不需要返回新的链表
  • 时间复杂度O(n),空间复杂度O(1)


void reverse(LinkList &L) {
  LNode *p = L->next, *q;
  L->next = NULL;
  while (p != NULL) {
    q = p->next;  // 记录后缀
    p->next = L->next;  // 插到L后面
    L->next = p;
    p = q;  // 继续插入下一个结点
  }
}


目录
相关文章
|
11天前
|
存储 算法
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
|
11天前
|
搜索推荐 算法
【排序】数据结构——排序算法概念及代码详解(插入、冒泡、快速、希尔)
【排序】数据结构——排序算法概念及代码详解(插入、冒泡、快速、希尔)
|
5天前
|
算法
数据结构和算法常见的问题和代码
数据结构和算法常见的问题和代码
|
15天前
|
存储 机器学习/深度学习 缓存
【数据结构】布隆过滤器原理详解及其代码实现
【数据结构】布隆过滤器原理详解及其代码实现
|
22天前
|
算法 C语言
数据结构和算法——桶排序和基数排序(图示、伪代码、多关键字排序,基数排序代码)
数据结构和算法——桶排序和基数排序(图示、伪代码、多关键字排序,基数排序代码)
11 0
|
22天前
|
算法 C语言
数据结构和算法——归并排序(有序子列的归并、递归算法、非递归算法、思路图解、C语言代码)
数据结构和算法——归并排序(有序子列的归并、递归算法、非递归算法、思路图解、C语言代码)
12 0
|
22天前
|
存储 算法 C语言
数据结构和算法——堆排序(选择排序、思路图解、代码、时间复杂度、堆排序及代码)
数据结构和算法——堆排序(选择排序、思路图解、代码、时间复杂度、堆排序及代码)
14 0
|
22天前
|
算法 Shell C语言
数据结构与算法——希尔排序(引例、希尔增量序列、原始希尔排序、代码、时间复杂度、Hibbard增量序列、Sedgewick增量序列)
数据结构与算法——希尔排序(引例、希尔增量序列、原始希尔排序、代码、时间复杂度、Hibbard增量序列、Sedgewick增量序列)
15 0
|
22天前
|
人工智能 算法 C语言
数据结构与算法——简单排序-冒泡排序、插入排序,时间复杂度下界(图示、代码、时间复杂度、定理)
数据结构与算法——简单排序-冒泡排序、插入排序,时间复杂度下界(图示、代码、时间复杂度、定理)
17 0
|
22天前
|
算法 C语言
数据结构与算法——拓扑排序(引例、拓扑排序、伪代码、代码、关键路径问题)
数据结构与算法——拓扑排序(引例、拓扑排序、伪代码、代码、关键路径问题)
15 0