單向鍊錶按一定順序新增 獲取倒數第K個值 反轉

2021-10-22 07:14:43 字數 2061 閱讀 7134

// 根據no編號值進行排序,將節點新增到指定的位置

public

void

addherosort

(heronode heronode)

if(temp.next.no > heronode.no)

if(temp.next.no == heronode.no)

temp = temp.next;}if

(flag)

else

}

拓展:當傳入的值為頭結點時,對此鍊錶進行遍歷,將**新增到上面的方法中,可以實現鍊錶的排序

/**

* 分析:倒數第k個節點就是正數第size - k + 1個節點,這裡size表示這個鍊錶的長度

*/public heronode getheronode

(heronode head,

int k)

int size =

getlength

(head);if

(k <=

0|| k > size)

heronode temp = head.next;

// 表示第乙個節點

for(

int i =

1; i < size - k +

1; i++

)return temp;

}

1、建立乙個反轉後鍊錶的頭結點,遍歷原有鍊錶,將原有鍊錶的每乙個值都新增在新煉表頭結點的後面實現反轉

public

void

reversenode4

(heronode head)

heronode cur = head.next;

heronode next;

heronode reservenodehead =

newheronode()

;while

(cur != null)

head.next = reservenodehead.next;

}

同上一樣的方式,不建立新的節點,直接在原鍊錶的頭結點上進行插入,反轉

public

void

reversenode3

(heronode head)

heronode cur = head.next;

heronode next;

head.next = null;

while

(cur != null)

}

方式二:不建立頭結點,遍歷原始鍊錶的每乙個節點,從後向前建立新的鍊錶

public

void

reversenode2

(heronode head)

heronode cur = head.next;

heronode next;

heronode first = null;

while

(cur != null)

head.next = first;

}

方式三:迴圈遍歷多次,每次獲取原始鍊錶的最後乙個節點,把這個節點新增到新的鍊錶中,並刪除原鍊錶的最後乙個節點,再次遍歷,直到原煉表為空

public heronode reversenode

(heronode head)

singlelinkedlist list =

newsinglelinkedlist()

;;while

(head.next.next != null)

list.

addhero

(temp.next)

; temp.next = null;

} list.

addhero

(head.next)

;return list.

gethead()

;}

雙向鍊錶按順序新增的注意點

雙向鍊錶按順序新增node的時候,要先處理node後面的指標,再處理node前面的指標,原因在於 如果先把node和鍊錶前半截連起來,鍊錶前半截指向鍊錶後半截的指標就沒了,這樣後半截鍊錶就找不到了 先把node和鍊錶後半截連起來,這樣由於node是可以直接找到的,所以可以進行將node和鍊錶前半截連...

python實現獲取單向鍊錶倒數第k個結點的值示例

初始化鍊錶的結點 class node def init self,itedqhejm self.item item self.next none 傳入頭結點,獲取整個鍊錶的長度 def length headnode if headnode none return none count 0 cur...

13 輸入乙個單向鍊錶,輸出該鍊錶中倒數第k個結點

題目 輸入乙個單向鍊錶,輸出該鍊錶中倒數第k個結點。鍊錶的倒數第0個結點為鍊錶的尾指標。方法一 假設整個鍊錶有 n個結點,那麼倒數第 k個結點是從頭結點開始的第 n k 1 個結點 從 0開始計數 如果我們能夠得到鍊錶中結點的個數 n,那我們只要從頭結點開始往後走 n k 1 步就可以了。如何得到結...