当前位置:   article > 正文

反转链表C++实现

反转链表c++实现

实现链表的反转有两个方法:

(1)定义一个新的链表,实现链表反转,但是会造成内存空间的浪费;

(2)只需要改变next指针的方向,就可以直接对链表反转,如下面动画所示:

步骤如下:

1.使cur指针指向现在的头结点;

2.初始化一个pre指针,初始化为null;

3.将cur->next用tmp存一下,改变next的方向(使用循环),最后cur指向null,返回pre为新的头结点。

  1. //Solution 1 --双指针法
  2. ListNode* reverseList(ListNode* head) {
  3. ListNode* cur = head;
  4. ListNode* pre = NULL;
  5. while(cur != NULL) {
  6. ListNode* tmp = cur->next;
  7. cur->next = pre;
  8. pre = cur;
  9. cur = tmp;
  10. }
  11. return pre;
  12. }

可以使用递归法实现:

  1. //Solution 2 --递归法
  2. ListNode* reverseList(ListNode* head) {
  3. return reverse(NULL,head);
  4. }
  5. ListNode* reverse(ListNode* pre,ListNode* cur) {
  6. if (cur == NULL) {
  7. return pre;
  8. }
  9. ListNode* tmp = cur->next;
  10. cur->next = pre;
  11. return(cur,tmp)
  12. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/算法设计者/article/detail/62838
推荐阅读
相关标签
  

闽ICP备14008679号