面試題18 劍指offer 刪除鍊錶的節點

2021-09-26 06:35:07 字數 1215 閱讀 1329

題目一:

在o(1)時間刪除鍊錶結點。給定單向鍊錶的頭指標和乙個結點指標,定義乙個函式在o(1)時間刪除該結點。

思路:

由於單向鍊錶只有next指標,要刪除給定節點必須要知道它的上乙個節點,通常會從頭遍歷複雜度為o(n),不滿足題目,可以將給定節點的下乙個節點的值賦值給給定節點,然後刪除給定節點的下乙個節點,與刪除給定節點的效果相同。

**:

private

static listnode deletenode

(listnode head,listnode node)

listnode cur=head;

if(node.next!=null)

else

if(head==node)

else

cur.next=null;

}return head;

}

題目二:

在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。 例如,鍊錶1->2->3->3->4->4->5 處理後為 1->2->5。

思路:

兩個指標指向鍊錶元素,看是否相等,注意邊界條件,比如從頭結點開始就相等的情況以及中間相等的數字有多個等,都要考慮到。

**:

private

static listnode deleteduplicationnode

(listnode phead)

//注意備用頭結點,頭結點可能被刪除

listnode first =

newlistnode(-

1); first.next = phead;

listnode p = phead;

//前節點

listnode prenode = first;

while

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

prenode.next = p;

//刪除操作,前節點的next直接等於現在的節點,把中間的節點直接跨過

}else

}return first.next;

}

劍指offer 面試題18 刪除鍊錶的節點

給定單向鍊錶的頭指標和乙個節點指標,定義乙個函式在o 1 時間內刪除該節點。鍊錶節點與函式的定義如下 public static class listnode 將要刪除節點的next節點直接複製到該節點上。刪除原先的next節點 public void deletenode listnode hea...

劍指Offer面試題18 刪除鍊錶的節點

刪除鍊錶的節點 struct listnode void deletenode listnode plisthead,listnode ptobedelete if ptobedelete next nullptr 要刪除的節點不是尾節點 else 要刪除的節點為尾節點 p next nullptr...

劍指offer 面試題18 刪除鍊錶的節點

給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。注意 此題對比原題有改動 示例 1 輸入 head 4,5,1,9 val 5 輸出 4,1,9 解釋 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 1 9.示例 2 輸入...