当前位置:   article > 正文

反转链表(C++非递归)_反转链表 三指针 c

反转链表 三指针 c

方法一:直接将链表转换方向

 需要三个指针,分别为prev,cur,next。prev作用在于能使链表在连接的时候找到前一个结点,而next作用在于为链表寻找下一个节点。

反转过程:让当前节点的下一个位置指向原来链表中前一个结点,也就实现了链表的“箭头”方向转换,之后的每个结点以此类推。

迭代过程:让prev走到cur的位置上,cur走到next的位置上,next走到下一个next的位置上,值得注意的是,如果next已经为空了,则不能继续往下走,否则会出现野指针的出现。cur是空指针的时候,迭代过程结束。返回prev,也就是链表头。

特殊情况:当链表为空时,则无需操作,直接返回NULL即可。

代码如下:

  1. * Definition for singly-linked list.
  2. * struct ListNode {
  3. * int val;
  4. * ListNode *next;
  5. * ListNode() : val(0), next(nullptr) {}
  6. * ListNode(int x) : val(x), next(nullptr) {}
  7. * ListNode(int x, ListNode *next) : val(x), next(next) {}
  8. * };
  9. */
  10. class Solution {
  11. public:
  12. ListNode* reverseList(ListNode* head) {
  13. ListNode* prev,*cur,*next;
  14. if(head==NULL) return NULL;
  15. prev=NULL;
  16. cur=head;
  17. next=cur->next;
  18. while(cur)
  19. {
  20. cur->next=prev;
  21. prev=cur;
  22. cur-next;
  23. if(next) next=next->next;
  24. }
  25. return prev;
  26. }
  27. };

方法二:头插法

创建一个新链表,将每个结点进行头插,得到的新链表就是反转后的链表。

需要两个指针cur和next。cur记录当前结点,next记录下一个结点位置。将cur的下一个指向newhead的位置(newhead是新链表的头部),然后把newhead更新为cur,再将cur的值更新为next,当cur为空指针时循环结束,也就不会再让next继续往下走,造成野指针的出现。返回newhead作为新链表的头节点。

代码如下:

  1. class Solution {
  2. public:
  3. ListNode* reverseList(ListNode* head) {
  4. ListNode* newhead = NULL;
  5. ListNode* cur = head;
  6. while (cur)
  7. {
  8. ListNode* next = cur->next;
  9. cur->next = newhead;
  10. newhead = cur;
  11. cur = next;
  12. }
  13. return newhead;
  14. }
  15. };

不开辟新节点的方法如下:

  1. //头插法翻转链表(不创建新节点,需要用到一个尾指针)
  2. template<typename datatype>
  3. void linklist<datatype>::reverse_list2()
  4. {
  5. listnode<datatype>* tail = head->next;
  6. listnode<datatype>* cur = head->next->next;
  7. while (cur)
  8. {
  9. tail->next = cur->next;
  10. cur->next = head->next;
  11. head->next = cur;
  12. cur = tail->next;
  13. }
  14. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/1016823
推荐阅读
相关标签
  

闽ICP备14008679号