日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode--19. 删除链表的倒数第N个节点

發(fā)布時間:2024/7/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode--19. 删除链表的倒数第N个节点 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

給定一個鏈表,刪除鏈表的倒數(shù)第?n?個節(jié)點(diǎn),并且返回鏈表的頭結(jié)點(diǎn)。

示例:

給定一個鏈表: 1->2->3->4->5, 和 n = 2.

當(dāng)刪除了倒數(shù)第二個節(jié)點(diǎn)后,鏈表變?yōu)?1->2->3->5.
說明:

給定的 n?保證是有效的。

進(jìn)階:

你能嘗試使用一趟掃描實(shí)現(xiàn)嗎?

?

快慢指針法

一次遍歷就可以完成,我運(yùn)用了三個指針來完成

剛開始,第一個p,第二個r指針指向第一個節(jié)點(diǎn),第三個指針q指向第n-1個節(jié)點(diǎn)

之后第一個指針,第三個指針向后移動,第二個指針指向第一個指針的前一個節(jié)點(diǎn)(一會方便刪除)

當(dāng)?shù)谌齻€指針q的下一個指向?yàn)榭諘r,說明第一個指針p所指向的節(jié)點(diǎn)就是需要刪除的節(jié)點(diǎn)

那么r.next = r.next.next就可以直接刪除

可以直接提交的代碼:

class Solution {
? ? public ListNode removeNthFromEnd(ListNode head, int n) {
? ? ? ?ListNode p,q,r;
?? ??? ?p = head;
?? ??? ?q = head;
?? ??? ?r = p;
?? ??? ?int i;
?? ??? ?if(head.next==null)?
?? ??? ?{
?? ??? ??? ?head = null;
?? ??? ??? ?return head;
?? ??? ?}
?? ??? ?for(i=1;i<n;i++)
?? ??? ?{
?? ??? ??? ?q = q.next;
?? ??? ?}
?? ??? ?if(q.next==null)
?? ??? ?{
?? ??? ??? ?head = head.next;
?? ??? ?}
?? ??? ?while(q.next!=null)
?? ??? ?{
?? ??? ??? ?r = p;
?? ??? ??? ?p = p.next;
?? ??? ??? ?q = q.next;
?? ??? ?}
? ? ? ? r.next = r.next.next;
? ? ? ? return head;
? ? }
}

?

完整代碼:

package Solution19;

public class Solution19 {
?? ?public static ListNode removeNthFromEnd(ListNode head, int n) {
?? ??? ?ListNode p,q,r;
?? ??? ?p = head;
?? ??? ?q = head;
?? ??? ?r = p;
?? ??? ?int i;
?? ??? ?if(head.next==null)?
?? ??? ?{
?? ??? ??? ?head = null;
?? ??? ??? ?return head;
?? ??? ?}
?? ??? ?for(i=1;i<n;i++)
?? ??? ?{
?? ??? ??? ?q = q.next;
?? ??? ?}
?? ??? ?if(q.next==null)
?? ??? ?{
?? ??? ??? ?head = head.next;
?? ??? ?}
?? ??? ?while(q.next!=null)
?? ??? ?{
?? ??? ??? ?r = p;
?? ??? ??? ?p = p.next;
?? ??? ??? ?q = q.next;
?? ??? ?}
? ? ? ? r.next = r.next.next;
? ? ? ? return head;
? ? }
?? ?public static void main(String[] args)
?? ?{
?? ??? ?ListNode head = new ListNode(1);
?? ??? ?ListNode p = head;
?? ??? ?ListNode q = new ListNode(2);
?? ??? ?p.next = q;
?? ??? ?p = q;
?? ??? ?q = new ListNode(3);
?? ??? ?p.next = q;
?? ??? ?p = q;?
?? ??? ?q = new ListNode(4);
?? ??? ?p.next = q;
?? ??? ?p = q;?
?? ??? ?q = new ListNode(5);
?? ??? ?p.next = q;
?? ??? ?p = q;?
?? ??? ?p.next = null;
?? ??? ?head = removeNthFromEnd(head,2);
?? ??? ?while(head!=null)
?? ??? ?{
?? ??? ??? ?System.out.println(head.val);
?? ??? ??? ?head = head.next;
?? ??? ?}
?? ?}
}
?

總結(jié)

以上是生活随笔為你收集整理的Leetcode--19. 删除链表的倒数第N个节点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。