成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

如何通過一次遍歷刪除鏈表倒數(shù)第N個(gè)元素

給定一個(gè)鏈表,刪除鏈表的倒數(shù)第n個(gè)節(jié)點(diǎn),并且返回鏈表的頭結(jié)點(diǎn)。本篇經(jīng)驗(yàn)將分享一個(gè)快慢指針?biāo)惴ǎ贠(1)的空間復(fù)雜度下返回結(jié)果。聲明鏈表節(jié)點(diǎn)類首先,我們需要聲明一個(gè)鏈表節(jié)點(diǎn)類,用于構(gòu)建鏈表結(jié)構(gòu)。```

給定一個(gè)鏈表,刪除鏈表的倒數(shù)第n個(gè)節(jié)點(diǎn),并且返回鏈表的頭結(jié)點(diǎn)。本篇經(jīng)驗(yàn)將分享一個(gè)快慢指針?biāo)惴?,在O(1)的空間復(fù)雜度下返回結(jié)果。

聲明鏈表節(jié)點(diǎn)類

首先,我們需要聲明一個(gè)鏈表節(jié)點(diǎn)類,用于構(gòu)建鏈表結(jié)構(gòu)。

```java

public class ListNode {

int val;

ListNode next;

ListNode(int x) { val x; }

}

```

通過快慢指針找到倒數(shù)第n個(gè)元素

我們可以通過兩個(gè)間隔為n的節(jié)點(diǎn)指針,找到倒數(shù)第n個(gè)元素。

首先,初始化兩個(gè)指針,分別指向鏈表的頭部。然后,將快指針向前移動(dòng)n步。接著,快指針和慢指針一起向前移動(dòng),直到快指針遍歷完鏈表。此時(shí),慢指針會(huì)指向倒數(shù)第n個(gè)節(jié)點(diǎn)元素。需要注意的是,如果快指針向前移動(dòng)n步之后已經(jīng)為空,則說明我們要?jiǎng)h除的是第一個(gè)元素。

```java

public ListNode removeNthFromEnd(ListNode head, int n) {

ListNode dummy new ListNode(0);

head;

ListNode fast dummy;

ListNode slow dummy;

// 快指針先向前移動(dòng)n步

for (int i 0; i < n; i ) {

fast ;

}

// 快慢指針一起向前移動(dòng),直到快指針遍歷完鏈表

while (fast ! null) {

fast ;

slow ;

}

// 刪除倒數(shù)第n個(gè)節(jié)點(diǎn)

;

return ;

}

```

輸出鏈表

為了驗(yàn)證算法的正確性,我們可以編寫代碼輸出整個(gè)鏈表。

```java

public void printList(ListNode head) {

ListNode curNode head;

while (curNode ! null) {

( " ");

curNode ;

}

();

}

```

測(cè)試代碼

在主方法中,我們可以構(gòu)建一個(gè)鏈表并調(diào)用上述方法刪除倒數(shù)第n個(gè)元素,并將結(jié)果輸出到控制臺(tái)。

```java

public static void main(String[] args) {

Solution solution new Solution();

ListNode head new ListNode(1);

ListNode node2 new ListNode(2);

ListNode node3 new ListNode(3);

ListNode node4 new ListNode(4);

ListNode node5 new ListNode(5);

node2;

node3;

node4;

node5;

int n 2;

ListNode result (head, n);

(result);

}

```

運(yùn)行結(jié)果

運(yùn)行主方法,觀察控制臺(tái)輸出,可以驗(yàn)證算法的正確性。

```

1 2 3 5

```

提交算法

最后,我們可以將算法提交到面試平臺(tái)進(jìn)行測(cè)試。

標(biāo)簽: