刪除連結串列倒數第 n 個結點
阿新 • • 發佈:2018-12-10
Java程式碼實現:刪除連結串列倒數第 n 個結點
問題描述:
給你一個單向連結串列,刪除連結串列倒數第n個結點,然後返回head結點。這裡的數字n是有效數字。
Given linked list: 1->2->3->4->5, and n = 2.
移除倒數第二個結點之後: 1->2->3->5.
方法一:先遍歷獲取連結串列長度,接著獲取要移除的前一個元素,修改該元素的node.next --> node.next.next。
程式碼如下:
/** * 移除連結串列倒數第n個結點,先遍歷獲取連結串列長度,接著獲取要移除的前一個元素,修改該元素的node.next --> node.next.next。 * * @param head * @param n * @return */ public SingleNode removeNthFromEnd1(SingleNode head, int n) { SingleNode dummy = new SingleNode(0, head); //獲取連結串列長度 int length = 0; SingleNode first = head; while (first != null) { length++; first = first.next; } // 找到角標為(length - n - 1)的結點,讓其next指向下下一個結點。 first = head; int index = 0; while (index < length - n - 1) { first = first.next; index++; } first.next = first.next.next; return dummy.next; }
測試程式碼如下:
SingleLinkedList sll = new SingleLinkedList(); for (int i = 0; i < 5; i++) { sll.addLast(i + 1); } System.out.println(sll.toString()); SingleNode node1 = removeNthFromEnd1(sll.getFirst(), 2); sll.logFromHead("removeNthFromEnd1", node1);
輸出結果如下:符合預期
I/System.out: SingleLinkedList:[1, 2, 3, 4, 5]
I/System.out: removeNthFromEnd1:[1, 2, 3, 5]
感興趣的同學可自行修改測試用例。
方法二:使用兩個指標,兩個指標保持固定間距n+1,接著開始遍歷。當前面的指標指向null的時候,後面的那個指標剛好指向要移除的結點前一個,我們讓其next指向其next.next即可。
/** * 移除連結串列倒數第n個結點,使用兩個指標實現。 * * @param head * @param n * @return */ public SingleNode removeNthFromEnd2(SingleNode head, int n) { SingleNode dummy = new SingleNode(0, head); SingleNode left = dummy; SingleNode right = dummy; for (int i = 0; i <= n; i++) { right = right.next; } while (right != null) { left = left.next; right = right.next; } left.next = left.next.next; return dummy.next; }
測試程式碼如下:
SingleLinkedList sll = new SingleLinkedList();
for (int i = 0; i < 5; i++) {
sll.addLast(i + 1);
}
System.out.println(sll.toString());
SingleNode node2 = removeNthFromEnd2(sll.getFirst(), 2);
sll.logFromHead("removeNthFromEnd2", node2);
輸出結果如下:跟預期一致。
SingleLinkedList:[1, 2, 3, 4, 5]
removeNthFromEnd2:[1, 2, 3, 5]
完整程式碼請檢視
專案中搜索SingleLinkedList即可。
github傳送門 https://github.com/tinyvampirepudge/DataStructureDemo
gitee傳送門 https://gitee.com/tinytongtong/DataStructureDemo