holyya.com
2025-09-04 16:33:02 Thursday
登录
文章检索 我的文章 写文章
C++链表反转代码
2023-07-05 02:04:35 深夜i     --     --
C++ 链表 反转 代码

链表是一种重要的数据结构,在程序设计中得到了广泛的应用。C++语言作为一种面向对象的编程语言,可以方便地实现链表的操作。在链表中,反转链表是一种重要的操作,它可以改变链表中元素的顺序,使得链表头变成链表尾,链表尾变成链表头。下面将介绍C++语言实现链表反转的代码。

首先需要定义链表结构体。链表节点包括一个数据域和一个指针域,指针域指向下一个链表节点。


struct ListNode {

  int val;

  ListNode *next;

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

};

链表节点的构造函数用来初始化节点,参数为节点数据的值。

接下来,实现链表反转函数:


ListNode* reverseList(ListNode* head) {

  ListNode* pre = NULL;

  ListNode* cur = head;

  while (cur != NULL) {

    ListNode* next = cur->next;

    cur->next = pre;

    pre = cur;

    cur = next;

  }

  return pre; //返回链表头

}

该函数采用迭代的方式进行链表反转。首先定义两个指针pre和cur,分别指向前一个链表节点和当前链表节点,初始时pre为NULL,cur为链表头。然后进行循环,每次迭代首先将cur节点的下一个节点保存在next指针中,然后将cur节点的指针域指向pre节点,即将当前节点反转。然后将pre指针后移,指向当前节点,cur指针也后移,指向下一个节点,以便进行下一次迭代。最后,返回链表头,即原链表的尾。

接下来,可以通过下面的代码进行测试:


int main() {

  ListNode* head = new ListNode(1);

  head->next = new ListNode(2);

  head->next->next = new ListNode(3);

  head->next->next->next = new ListNode(4);

  head->next->next->next->next = new ListNode(5);

  ListNode* newHead = reverseList(head);

  while (newHead != NULL)

    cout << newHead->val << " ";

    newHead = newHead->next;

  

  return 0;

}

该测试代码创建了一个包含5个节点的链表,然后调用reverseList函数进行反转,最后打印反转后的链表节点的值,结果如下:


5 4 3 2 1

可以看出,链表反转成功,每个节点的值都被反转了。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复