详解删除链表的倒数第N个结点
生活随笔
收集整理的這篇文章主要介紹了
详解删除链表的倒数第N个结点
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
LeetCode連接
給你一個鏈表,刪除鏈表的倒數(shù)第?n?個結點,并且返回鏈表的頭結點。
示例1:
?結果如下
?
?【第一步】加入虛擬頭結點,然后定義快慢指針指向虛擬頭結點
?【第二步】讓fast指針移動n步(n=2)
?
?【第三步】移動fast指針和slow指針,直到fast.next == null,此時slow指針就指向了待刪除結點的前驅(qū)節(jié)點。
?
?【第四步】利用slow.next = slow.next.next 就可以對節(jié)點進行刪除。
?
?【代碼如下】
package link;import static link.ListNode.print;public class RemoveNthFromEnd {public static void main(String[] args) {ListNode node1 = new ListNode(1);ListNode node2 = new ListNode(2);ListNode node3 = new ListNode(3);ListNode node4 = new ListNode(4);ListNode node5 = new ListNode(5);node1.next = node2;node2.next = node3;node3.next = node4;node4.next = node5;System.out.println("=========交換前=========");print(node1);ListNode node = removeNthFromEnd(node1,2);System.out.println("=========交換后=========");print(node);}public static ListNode removeNthFromEnd(ListNode head, int n) {// 最好要先獲得鏈表的長度,如果刪除的n > size 會出現(xiàn)空指針異常// 設置虛擬頭結點方便刪除 第一個節(jié)點。ListNode dummy = new ListNode();dummy.next = head;// 設置快慢指針ListNode fast = dummy;ListNode slow = dummy;// 先移動fast指針,讓fast指針與slow指針相差n個節(jié)點。while (n-- > 0) {fast = fast.next;}// 找到待刪除節(jié)點的前驅(qū)節(jié)點slowwhile (fast.next != null) {fast = fast.next;slow = slow.next;}// 此時slow 指向待刪除的節(jié)點的前驅(qū)節(jié)點slow.next = slow.next.next;return dummy.next;} }【結果】
?
總結
以上是生活随笔為你收集整理的详解删除链表的倒数第N个结点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 弘辽科技:拼多多开直通车大忌有哪些?推广
- 下一篇: STM32项目-STM32智能小车-电子