003 刪除鍊錶的中間節點和b分之a處的結點

2021-09-19 16:21:12 字數 1328 閱讀 4530

package com.my.util;

/** * 單鏈表結點

* */

public

class

linknode

}

package com.my.suanfa;

import com.my.util.linknode;

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

* */

public

class

solution09

//9如果鍊錶長度為2,刪除第1個結點

if(head.next.next == null)

//如果鍊錶長度為3,4,刪除第2個結點

//如果鍊錶長度為5,6,刪除第3個結點

//定義兩個指標,pre指向要刪除結點的前乙個節點,cur從第三個節點開始每次向後移動兩個節點,因為鍊錶的長度每增加2,要刪除的結點的位置向後移動乙個結點

linknode pre = head;

linknode cur = head.next.next;

while

(cur.next != null && cur.next.next != null)

//pre為要刪除結點的上乙個結點,因此刪除pre的後繼結點

pre.next = pre.next.next;

//返回刪除後的鍊錶

return head;

}/**

* 刪除鍊錶的a/b處的結點

* */

public linknode removebyratio

(linknode head,

int a,

int b)

//遍歷一次鍊錶求出鍊錶的長度用於計算要刪除的是哪個結點

int n =0;

linknode cur = head;

while

(cur != null)

//計算要刪除的是第幾個結點

n =(int

)math.

ceil((

(double

)(n * a))/

(double

)b);

//遍歷鍊錶找到要刪除的結點的上乙個節點

//如果要刪除的是第乙個節點,那麼直接刪除

if(n ==1)

if(n >1)

//cur為要刪除的結點的前乙個結點,刪除cur的後繼結點

cur.next = cur.next.next;

}//返回刪除後的鍊錶

return head;

}}

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

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

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

問題描述 給定鍊錶的頭節點head,實現刪除鍊錶的中間節點的方法 若為偶數個 比如1234則刪除節點2 給定鍊錶的頭節點head,實現刪除鍊錶的a b處節點的方法 思路分析 刪除中間節點 1個節點,不刪除 2個節點,刪除節點1 3個節點,刪除節點2 4個節點,刪除節點2 5個節點,刪除節點3 6個節...

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

給定鍊錶的頭節點head,實現刪除鍊錶中間節點的函式和刪除位於a b處節點的函式。當有偶數個節點時,刪除兩個中間節點的前乙個,有奇數個節點時,刪除中間節點。刪除a b處的節點 鍊錶1 2 3 4 5,假設a b的值為r,如果r 0,不刪除任何節點。如果r在區間 0,1 5 上,刪除節點1 依次類推 ...