• 特殊的反转单链表算法(C++)


    普通的单链表反转算法

    大学的时候也做过好几次单链表的反转,记得当时都是用三个变量不断修改next的值然后实现反转。

     1 ListNode* reverseList(ListNode* head) {
     2     ListNode *pre = NULL,*tmp,*cur = head;
     3     while(cur != NULL){
     4         tmp = cur->next;
     5         cur->next = pre;
     6         pre = cur;
     7         cur = tmp;
     8     }
     9     return pre;
    10 } 

    整个过程很简单,就是cur指向当前节点,pre之前cur的前一个节点,然后不断向前推进直到结束。
    最后返回的pre即为新链表的头指针。

    一个有意思的反转算法

    最近解题的时候发现了一个特别好玩反转算法,简单的来说就是把整个指针地址交换掉的算法。 最后还是返回原链表的头指针就OK。

     1 ListNode* reverseList(ListNode *head) {
     2 ListNode **prev = &head;
     3 prev = &(*prev)->next;
     4 ListNode **pivot = &(*prev)->next;
     5 while(prev) {
     6     swap(*prev, (*pivot)->next);
     7     swap(*prev, *pivot);
     8 }
     9 return head;
    10 }

    有的时候想一想代码的世界真的没有终结,只有你想不到,没有做不到的事。

  • 相关阅读:
    P1312 [NOIP2011 提高组] Mayan 游戏
    Codeforces Round 736
    CF487E Tourists
    荏苒
    数论
    [NOI2009] 二叉查找树 题解
    元素
    线性基
    杂录
    SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别
  • 原文地址:https://www.cnblogs.com/dinghing154/p/5903676.html
Copyright © 2020-2023  润新知