日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何找出单链表中倒数第K个元素

發布時間:2023/12/29 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何找出单链表中倒数第K个元素 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一種方法

為了找出單鏈表的倒數第K個元素,需要知道這個單鏈表的長度是多少,就是需要遍歷一遍這個單鏈表,長度為n,倒數第k個,就是單鏈表的第(n-k)個元素

public Node findLastK(Node head, int k){Node pNode = head;int n=0;while (pNode.next != null){n++;pNode = pNode.next;}pNode = head;for (int i=0;i<(n-k);i++){pNode = pNode.next;}return pNode;}

第二種方法

上面的方法需要進行兩次遍歷。
如果從頭到尾方向從鏈表的某個元素開始,遍歷k個元素后剛好到達了鏈表的末尾,那么當前元素就是要找的第k個元素。
算法步驟:

從頭節點開始,依次對鏈表的每個節點元素進行這樣的測試,遍歷K個元素,直到可以到達鏈表的末尾。

分析:

這種方法將對同一批元素進行反復多次的遍歷,對于鏈表中大多數元素而言,都需要遍歷K個元素,如果鏈表的長度為n,那么這個算法復雜度為O(n*k)。

代碼實現

public Node findLastK(Node head, int k){Node pNode = head;Node moveNode = head;int i = 0;while (pNode != null){moveNode = pNode;i=0;while (i<=k){moveNode= moveNode.next;i++;}if (moveNode == null){break;}pNode = pNode.next;}return pNode;}

第三種解法

另一種高效的方式是只需要依次遍歷就可以實現功能。

由于單鏈表只能從頭到尾遍歷元素,因此,如果要找出鏈表的倒數第k個元素的話,也只能從頭到尾進行遍歷查找,在查找過程中,設置兩個指針,讓其中一個指針比另一個指針(Java中無指針概念)向前移動k-1不,然后這兩個指針同時向前移動,當先行指針移動到Null是,就代表另一個指針指向的位置就是倒數第k個節點。

代碼實現:

public Node findLastK(Node head, int k) {if (k < 1) {return null;}Node p1 = head;Node p2 = head;for (int i = 0; i < k - 1 && p1 != null; i++) {p1 = p1.next;}while (p1.next != null) {p1 = p1.next;p2 = p2.next;}return p1;}

總結

以上是生活随笔為你收集整理的如何找出单链表中倒数第K个元素的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。