1. 程式人生 > >遍歷一次實現單鏈表順序反轉

遍歷一次實現單鏈表順序反轉

近日在閱讀《程式設計之美》中看到,單鏈表在不告訴頭指標的情況下完成刪除指定節點的方法,演算法為將刪除節點的下一個節點的資料copy到刪除節點中,再刪除刪除節點的下一個節點,從而實現移花接木的效果,完成對要求刪除節點資料刪除的目的。程式碼如下:

      pCurrent->next = pNext->next;

      pCurrent->data = pNext->data;

      delete pNext;

擴張問題為編寫一個函式,給定一個連結串列的頭指標,要求遍歷一次,將單鏈表中的順序反過來。

我編寫這個函式的實現,程式碼如下:

       Node_t * inverse( Node_t *pHead )
      {
             Node_t *pNext = NULL;
             Node_t *pCurrent = pHead;
             Node_t *pLast = NULL;

       while (pCurrent->next != NULL)
             {
                    pNext = pCurrent->next;
                    pCurrent->next = pLast;
                    pLast = pCurrent;
                    pCurrent = pNext;
             }

            pCurrent->next = pLast;
             return pCurrent;
      }

通過總結,就是用節點指標變數儲存欲改變之前的節點指標,從而就可以實現各種功能了。

相關推薦

實現單鏈順序反轉

近日在閱讀《程式設計之美》中看到,單鏈表在不告訴頭指標的情況下完成刪除指定節點的方法,演算法為將刪除節點的下一個節點的資料copy到刪除節點中,再刪除刪除節點的下一個節點,從而實現移花接木的效果,完成對要求刪除節點資料刪除的目的。程式碼如下:       pCurrent-&

java實現---查詢單鏈的倒數第K個節點,要求只能連結串列;;;刪除連結串列的倒數第k個節點

java實現 查詢單鏈表的倒數第K個節點,要求只能遍歷一次連結串列 刪除連結串列的倒數第k個節點 查詢單鏈表的倒數第K個節點,要求只能遍歷一次連結串列 定義兩個前後節點forward和backward 先

java實現---查詢單鏈的中間節點,要求只能連結串列

定義兩個節點,一個快,一個慢 快的一次走兩步;慢的一次走一步 當快的走到連結串列的最後時,慢的剛好走到一半,即連結串列的中間節點 class ListNode{ int data; ListNode next; } public class

,將單鏈中的元素順序反轉過來

轉載請註明出處。 思想很簡單,邊遍歷邊將指標反向,順便將資料往前移一個單位,這樣原來的最後一個節點就變成頭節點了。 程式碼實現如下: #include<stdio.h> #inclu

查詢單鏈的倒數第k個結點,要求只能連結串列

pNode FindLastKNode(pList plist, int k) { pNode pFast = plist; pNode pSlow = plist; if (plist == NULL || k <= 0) { return NULL;

查詢單鏈的倒數第k個節點,要求只能連結串列

為了得到倒數第k個結點,很自然的想法是先走到連結串列的尾端,再從尾端回溯k步。可是輸入的是單向連結串列,只有從前往後的指標而沒有從後往前的指標。因此我們需要開啟我們的思路。既然不能從尾結點開始遍歷這個連結串列,我們還是把思路回到頭結點上來。假設整個連結串列有n個

查詢單鏈的中間結點,要求只能連結串列

pNode FindMiddleNode(pList plist) { /* 快慢指標,快的兩步,慢的一步 */ pNode pFast = plist; pNode pSlow = plist; while (pFast&&pFast->n

單鏈,找出單鏈中間的值

1,演算法描述:給定一個單鏈表,但不知該表的大小,現要求只遍歷一次,找出位於單鏈表中間的值。        基本思想:設定兩個指標p,q,初始時,分別指向頭結點,迴圈使p後移兩位,q後移一位,當單鏈表遍歷完畢時,q的位置就是中間位置。注意:當單鏈表長度為偶數時,在最後一次迴

合併有序單鏈並排序(

LinkList MergeLinkList(LinkList L1, LinkList L2) { LinkList PnewHead = NULL; LinkList PL1 = L1; LinkList PL2 = L2;

給定一個字串,刪除字串中所有的b和ac組合, 要求:字串只,且不能使用額外的空間

string = 'aaascsscc' ls = list(string) def isA(ls): i = 0 while i < len(ls): if ls[i] == 'b': ls.pop(i) if i &g

刪除倒數第k個節點

如果遍歷兩遍連結串列,很容易就能想到方法,先遍歷一邊求出連結串列長度n,遍歷第二遍時遍歷到n-k位置刪除n-k+1個節點 現在是遍歷一遍過程也很簡單 1.宣告兩個指標p、q,分別指向連結串列頭結點,讓p遍歷到第k個節點處 2.若p還沒到k處就指向空,則連結串列長度不夠,

python3 迴圈map之後,map為空

今天在跟敲書本程式碼的時候,發現map型別的變數經過一次for迴圈遍歷之後,裡面的元素都沒有了,找了一些資料,特此記錄,以作備忘。 我們常常會寫類似於這樣的程式碼: dataSet = [[1,3,4],[2,3,5],[1,2,3,5],[2,5]] num = 0 D

js陣列如何,刪除部分元素

經常做後臺取資料,渲染到頁面工作的前端童鞋可能都碰到過這種需求:那就是如果後臺傳給前端的資料要二次處理,一個數組,其中具有某種共同特徵的元素是我們不需要的,必須要把它刪除掉,這時候怎麼做呢。 常見的思路是:先用map方法遍歷一次,或其它方法遍歷,總之是把要去掉的元素改成

連結串列刪除倒數第N個節點

刷 leetcode的 Remove Nth Node From End of List 的題目,一開始想這算是easy的題目了,只需要遍歷一次,記錄n個節點,然後減去倒數的節點數,就得到所要刪除的節點。但是沒注意題目的只遍歷一次。 解決這道題目的主要思路是,設立兩個指標

查詢連結串列的倒數第K個節點,只

找到輸入一個連結串列,輸出該連結串列中倒數第k個結點,連結串列只遍歷一次主要思想是:我們用兩個指標,先第一個指標走到K-1個節點,然後讓第二個指標指到0節點,讓兩個指標之間保持k的距離,當第一個指標指到

【python小隨筆】將一個列表的值,分成10個組,的時候每10個

t = ['B071LF9R6G', 'B0714BP3H4', 'B0756FL8R7', 'B072HX95ZR', 'B07CX389LX', 'B07D9MZ7BD', 'B07D9L15L5', 'B00L1UNPZ0', 'B07KDL9RSD', 'B01N02WUM3', 'B0

python實現單鏈反轉

翻轉 反轉 highlight 存在 -c convert link func ini 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #!/usr/bin/env python

圖的鄰接儲存 深度優先 廣度優先 C語言實現

ALGraph.h #pragma once #include "Queue.h" /************************************************************************/ /

【sql】-儲存過程實現迴圈列資料

前言      專案中要實現前端頁面動態配置行為,每個行為呼叫不同的儲存過程的功能,於是乎小編一頭扎進了儲存過程的海洋中,愈發覺得之前寫的儲存過程算是基礎了。遇到一個問題:查詢到表中一列資料,需要取出每一行資料來執行下一個儲存過程。這可怎麼鬧?別急,小編來給

資料結構 利用迴圈佇列層次棵二叉樹 遞迴實現

利用迴圈佇列層次遍歷一棵二叉樹 遞迴實現 程式碼實現: #include <iostream> ///迴圈佇列實現層次遍歷二叉樹 #include <stdio.h> #include <stdlib.h> #define Maxsiz