刪除鍊錶的a b處結點

2022-09-22 06:00:10 字數 1132 閱讀 4996

給定鍊錶的頭節點head,整數a和b,實現刪除位於a/b處節點的函式

例如:

鍊錶:1-2-3-4-5,假設a/b的值為r

如果r等於0,不刪除任何結點

如果r位於(0~1/5),刪除結點1

如果r位於(1/5~2/5),刪除結點2

如果r位於(2/5~3/5),刪除結點3

如果r位於(3/5~4/5),刪除結點4

如果r位於(4/5~1),刪除結點5

如果r大於1,不刪除任何結點

看到刪除結點,我們很快會想到使用快慢指標,但是本題刪除的結點沒有規律可循,通過觀察我們可以發現,如果將r的取值乘以鍊錶的長度,剩餘的值向上取整就是我們要刪除的結點位置,因此我們使用兩遍遍歷來確定要刪除的結點,第一次遍歷獲取鍊錶長度n,r = n*(a/b),將r向上取整就可以得到要刪除的節點位置,然後第二次遍歷鍊錶,將對應的結點刪除

解法:遍歷鍊錶

**:

public static node deletenode(node head,int a,int b) else if(a < 1 || a > b) 

// 接下來是正常情況

// 第一次遍歷,計算鍊錶的長度

int n = 0;

node node = head;

while(node != null)

// 計算要刪除的結點

n = (int) math.ceil((double) (n*a)/(double)b);

// 第二次遍歷,刪除結點

node = head;

if(n == 1) else if(n > 1)

node.next = node.next.next;

} return head;

}

**解析:

本題的重點在於找到要刪除的結點位置,根據題目給出的要求,我們可以知道需要的到刪除結點的位置需要知道鍊錶的長度,我們第一遍遍歷得到鍊錶的長度,然後得到我們的刪除結點位置,第二次遍歷就可以刪除節點了,當中還要注意乙個特殊情況,如果我們要刪除的結點是頭節點,我們直接刪除即可,如果不是頭節點就使用while迴圈進行遍歷,為了便於操作,我們遍歷到刪除結點的上乙個結點就停止,這樣子方便刪除結點

程式設計13 刪除鍊錶的中間結點和a b處的結點

header content type text html charset utf 8 刪除鍊錶的中間結點和a b處的結點 p38 class node function removemidnode head elseif head next next null else pre next pre ...

鍊錶問題3 刪除鍊錶的a b處的節點 高階

給定鍊錶的頭節點head,整數a和b,實現刪除位於a b處節點的函式。鍊錶 1 2 3 4 5,假設a b的值為r 如果r等於0,不刪除任何節點 如果r在 0,1 5 刪除節點1 如果r在 1 5,2 5 刪除節點2 如果r在 2 5,3 5 刪除節點3 如果r在 3 5,4 5 刪除節點4 如果r...

刪除鍊錶的中間節點和a b處節點

說明 本文是左程雲老師所著的 程式設計師面試 指南 第二章中 刪除鍊錶的中間節點和a b處節點 中的一道題目。在此感謝左程雲老師。題目 給定鍊錶的頭節點 head,實現刪除鍊錶的中間節點的函式。例如 步刪除任何節點 1 2,刪除節點1 1 2 3,刪除節點2 1 2 3 4,刪除節點2 1 2 3 ...