題目一:
給你乙個鍊錶,刪除鍊錶的倒數第 n 個結點,並且返回鍊錶的頭結點。高階:你能嘗試使用一趟掃瞄實現嗎?
示例 1:解法一:輸入:head = [1,2,3,4,5], n = 2 輸出:[1,2,3,5]
示例 2:
輸入:head = [1], n = 1 輸出:
示例 3:
輸入:head = [1,2], n = 1 輸出:[1]
利用乙個佇列來解決,將要刪除結點之前的元素和之後的元素全部入佇列,然後再出佇列即可。
**如下:
struct listnode*
removenthfromend
(struct listnode* head,
int n)
p = head;
while
(p)}
que.
push
(p->val)
; p = p-
>next;
} p = head-
>next;
struct listnode* q=p;
while
(!que.
empty()
)return q;
}
題目二:
給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。示例 1:
輸入: 1->1->2 輸出: 1->2
示例 2:
輸入: 1->1->2->3->3 輸出: 1->2->3
思路:利用雙指標解決,起初兩個指標都指向頭,讓乙個指標先跑,判斷前指標的值等於不等於後指標,如果不等於兩個指標同時往前跑,如果等於的話就讓前指標單獨往前跑。
**如下:
struct listnode*
deleteduplicates
(struct listnode* head)
struct listnode* p = head;
struct listnode* q = p;
while
(head !=
null
)else}if
(p !=
null
)return q;
}
題目三:
輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有 6 個節點,從頭節點開始,它們的值依次是 1、2、3、4、5、6。這個鍊錶的倒數第 2 個節點是值為 4 的節點。
示例:給定乙個鍊錶: 1->2->3->4->5, 和 k = 2.
返回鍊錶 4->5.
**:
class
solution
int n=count-k;
p=head;
while
(n>0)
return p;}}
;
題目四:
給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。
注意:此題對比原題有改動
示例 1:思路:利用雙指標進行輸入: head = [4,5,1,9], val = 5 輸出: [4,1,9] 解釋: 給定你鍊錶中值為 5
的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 -> 1 -> 9.
示例 2:
輸入: head = [4,5,1,9], val = 1 輸出: [4,5,9] 解釋: 給定你鍊錶中值為 1
的第三個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 -> 5 -> 9.
**如下:
struct listnode*
deletenode
(struct listnode* head,
int val)
struct listnode* p=head;
struct listnode*tmp=p;
struct listnode* q=head->next;
while
(q)else
}return tmp;
}
刪除鍊錶中的結點
1.題目描述 請編寫乙個函式,使其可以刪除某個鍊錶中給定的 非末尾 節點,你將只被給定要求被刪除的節點。現有乙個鍊錶 head 4,5,1,9 它可以表示為 示例 1 輸入 head 4,5,1,9 node 5輸出 4,1,9 解釋 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該...
刪除鍊錶A中與鍊錶B結點相同的結點
題目描述 有兩串鍊錶表示為a和b,刪除鍊錶a中的結點,滿足刪除條件的結點是該結點與鍊錶b中某結點的值相同。如下 include using namespace std typedef struct list plist int deletenode plist plist void createli...
刪除鍊錶結點
劍指offer18題 刪除鍊錶的節點 題目描述 給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。解題思路 該題在劍指offer中的原題是,給定乙個單鏈表的頭指標 指定結點指標,要求以o 1 的時間複雜度刪除該結點。解決方法為將待刪除結點的後繼結點的值 賦...