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 依次類推 ...