• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 單鏈表的逆序

    標簽: 單鏈表  逆序

    很多公司的面試題目中都會有這道題,但是開發久了之后,往往這些平常用不到的就慢慢的遺忘了,今天就整理一下。

    單鏈表定義

    我們知道線性表的鏈式存儲結構特點就是用一組任意的存儲單元存儲線性表的數據元素(這些存儲單元可以是連續的,也可以是不連續的)。因此,為了表示每個數據元素ai 與其直接后繼數據元素ai+1的邏輯關系,對數據元素ai 來說,除了存儲其本身的信息之外 還要存儲一個指示其直接后繼的信息。 這兩個部分就組成了元素ai的存儲映像,稱為結點。所以結點中包含了兩個域:數據域和指針域(指針域中存儲的信息稱做指針或鏈)。 n個結點鏈結成一個鏈表,即為線性表的鏈式存儲結構。又由于此鏈表的每個結點中只包含一個指針域,又被稱為線性鏈表或單鏈表。

    單鏈表示例

    線性表:(zhao,qian,sun,li,zhou,wu,zheng,wang)
    存儲結構:
    這里寫圖片描述

    單鏈表逆序

    在初始的狀態下,頭指針指向第一個結點的地址,第一個結點的next指向第二個結點的地址,最后一個結點的指針為空,即:
    這里寫圖片描述

    當我們需要進行逆序操作的時候,第一次的操作結果應該是:
    這里寫圖片描述

    通過以上的分析我們可以知道其算法如下:

    typedef struct LNode {
        ElemType data;
        struct LNode * next;
    } LNode , *LinkList;
    
    LinkList ReverseLink(LinkList head)
        {
           LNode *next;
            LNode *prev = NULL;
    
           while(head != NULL)
            {
                next = head->next;
                head->next = prev;
                prev = head;
                head = next;
           }
    
            return prev;
        }
    版權聲明:本文為lvchenqiang_原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/lvchenqiang_/article/details/78209954

    智能推薦

    單鏈表逆序排序問題

    Leetcode上刷到的三個單鏈表算法題 1.給定一個鏈表,兩兩交換其中相鄰的節點,并返回交換后的鏈表。 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。 示例: 給定 1->2->3->4, 你應該返回 2->1->4->3. 首先進行分析,最簡單且容易想到的方法就是由一個指針temp從單鏈表表頭head遍歷到最后一個,如果temp.next= ...

    單鏈表之逆序打印

      主要的思路是新定義兩個節點指針,分別指向此時操作節點的前一個和后一個節點。然后通過操作這兩個指針來實現逆序鏈表。即每次都操作一個新的頭,通過操作這個"頭結點"的前一個指針和后一個指針來實現斷線和新的連接(連接前一個)。 主要代碼段:   next_ptr = head->next;//因為后面要修改頭結點的next所以先保存起來,以便斷了之后操作頭...

    c語言單鏈表逆序

    頭結點不動,將節點1的next指針賦值為NULL,將鏈表打斷;每次將后一節點放到最前面,頭結點先不和后續節點連接,最后將頭結點與原鏈表的最后一個節點連接。 步驟:...

    關于單鏈表逆序的一個小問題

    這里寫自定義目錄標題 單鏈表逆序 關于單鏈表逆序。 單鏈表逆序函數 函數描述 運行結果 逆序中遇到的問題 單鏈表逆序 關于單鏈表逆序。 最近學習到了單鏈表這塊,基本的各種操作都能掌握,這里感覺最困難的是單鏈表逆序這一塊(也打算嘗試下寫下雙鏈表的逆序)。 聽好多人說這個也是面試中常考的問題,所以對這方面著重的練習了一下。網上的方法也有好多,不過好多看起來都好復雜,每次都是研究到一半就想放棄,好不容易...

    猜你喜歡

    數組刪除其中某個對象的方法

    數組刪除其中的對象或元素,在前端是比較常見的需求。 我現在比較常用的方法如下: 這種方法只適合刪除具有唯一標識的對象。 有沒有想要脫單的小伙伴,加入我們的脫單星球,認識更多優秀的小哥哥小姐姐 特此聲明,星球是免費的,但是創建星球的時候說是必須輸入金額,所以只能先私聊,我再加你免費加入!...

    圖床搭建以及圖床工具的使用

    為什么要用圖床和圖床工具? 比較下面三種md中的圖片url地址(均免費),你會使用哪一種? 選1?由于是本地路徑,文檔分享后給其他人打開后很可能顯示圖片加載失敗。 選2?雖然分享后可以顯示圖片,但能保證加載速度? 選3?我肯定選這種,即兼容2的瀏覽器訪問,又能保證訪問速度。 這樣就可以回答上面的問題了!保證瀏覽器訪問要用圖床,保證加載速度要用圖床工具,又不花錢想想就開心。 除此之外本篇博客還會講解...

    并發編程理論篇

    一、必備知識回顧 計算機又叫電腦,即通電的大腦,發明計算機是為了讓他通電之后能夠像人一樣去工作,并且它比人的工作效率更高,因為可以24小時不間斷 計算機五大組成部分 控制器 運算器 存儲器 輸入設備 輸出設備 計算機的核心真正干活的是CPU(控制器+運算器=中央處理器) 程序要想被計算機運行,它的代碼必須要先由硬盤讀到內存,之后cpu取指再執行 并發 看起來像同時運行的就可以稱之為并發 并行 真正...

    Java LinkedHashMap

    Java LinkedHashMap 前言 Map是我們在實際使用過程中常用的集合,HashMap在Java的實際開發中出鏡率很高,它通過hash算法實現了高效的非線程安全的集合,它有一個缺點就是,用戶插入集合的數據時無序,在我們需要一些有序的map的時候,我們就需要引入另外一個集合:LinkedHashMap。 LinkedHashMap是一個有序的非線程安全的集合,它是HashMap的子類,基...

    精品国产乱码久久久久久蜜桃不卡