如何找出单链表中倒数第K个元素
生活随笔
收集整理的這篇文章主要介紹了
如何找出单链表中倒数第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个元素的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenStack 命令行速查表
- 下一篇: 路由与交换实验——eNSP实验