21xrx.com
2024-12-23 01:51:23 Monday
登录
文章检索 我的文章 写文章
C++实现链表反转功能
2023-07-05 11:25:06 深夜i     --     --
C++ 链表 反转功能

链表是一种常见的数据结构,其基本单位是节点。每个节点包含一个数据域和一个指针域,指向下一个节点。链表的优点在于可以快速地插入、删除节点,但缺点是访问节点的时间复杂度为O(n),因为需要从头节点依次访问到目标节点。

在实际应用中,有时需要对链表进行反转操作,即将原链表的节点顺序翻转过来。这个操作可以通过迭代和递归两种方式实现,下面我们来介绍C++中如何实现链表反转功能。

1. 迭代方式

迭代方式是比较直观的一种实现方式。思路是从头节点开始,按顺序遍历每个节点,将每个节点的指针域指向前一个节点,最后将头节点的指针域置为NULL。具体实现如下:


struct ListNode {

  int val;

  ListNode *next;

  ListNode(int x) : val(x), next(NULL) {}

};

ListNode* reverseList(ListNode* head) {

  ListNode* prev = NULL;

  ListNode* cur = head;

  while (cur != NULL) {

    ListNode* next = cur->next;

    cur->next = prev;

    prev = cur;

    cur = next;

  }

  return prev;

}

2. 递归方式

递归方式也是一种简洁的实现方式。思路是将原链表分为头节点和剩余节点两部分,递归处理剩余节点,将剩余节点反转后与头节点拼接。具体实现如下:


ListNode* reverseList(ListNode* head) {

  if (head == NULL || head->next == NULL)

    return head;

  ListNode* newhead = reverseList(head->next);

  head->next->next = head;

  head->next = NULL;

  return newhead;

}

两种实现方式的时间复杂度都是O(n),但对于链表反转操作,递归方式相比迭代方式更简洁。这里需要提醒的是,不同题目要求链表反转的条件可能不同,具体实现方式也会有所差异。因此在实际应用中,需要根据题目要求选择合适的实现方式。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复
    相似文章