c_cpp 反向链表,迭代,递归

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 反向链表,迭代,递归相关的知识,希望对你有一定的参考价值。

ListNode* reverse_list_recursive(ListNode *head) {
    if(!head) return head;
    if(!head->next) return head;
    ListNode *new_head = reverse_list_recursive(head->next);
    head->next->next = head;
    head->next = NULL;
    return new_head;
}

void reverse(Node*& p) {
  if (!p) return;
  Node* rest = p->next;
  if (!rest) return;
  reverse(rest);
  p->next->next = p;
  p->next = NULL;
  p = rest;
}

ListNode* reverse_list_iterative(ListNode *head) {
    if(!head || !head->next) return head;
    ListNode *pre = NULL, *cur = head;
    while(cur) {
        ListNode *nxt = cur->next;
        cur->next = pre;
        pre = cur;
        cur = nxt;
    }
    return pre;
}

以上是关于c_cpp 反向链表,迭代,递归的主要内容,如果未能解决你的问题,请参考以下文章

C++怎么利用递归实现单线链表的反向输出??

c_cpp 合并两个排序列表,递归和迭代

c_cpp 查找链接列表的长度(迭代和递归)

使用递归的链表反向打印的意外结果

c_cpp 搜索链接列表中的元素(迭代和递归)

c_cpp 仅使用2个指针迭代地反转链表(一种有趣的方法)