diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 46b8313..d5780ba 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,9 +2,8 @@ - - - + + @@ -69,11 +68,11 @@ + - @@ -290,14 +289,8 @@ - - - - 1580320003660 - 1580395653122 @@ -635,7 +628,14 @@ - @@ -688,7 +688,6 @@ - @@ -713,7 +712,8 @@ - @@ -728,10 +728,10 @@ - + - + @@ -786,10 +786,10 @@ - + - + diff --git a/README.md b/README.md index 79c53c7..f97f646 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ ### 链表操作 * [q2_两数相加](/src/链表操作/q2_两数相加) +* [q19_删除链表的倒数第N个节点](/src/链表操作/q19_删除链表的倒数第N个节点) * [q138_复制带随机指针的链表](/src/链表操作/q138_复制带随机指针的链表) * [q206_反转链表](/src/链表操作/q206_反转链表) diff --git a/src/链表操作/q19_删除链表的倒数第N个节点/ListNode.java b/src/链表操作/q19_删除链表的倒数第N个节点/ListNode.java new file mode 100644 index 0000000..627c8d8 --- /dev/null +++ b/src/链表操作/q19_删除链表的倒数第N个节点/ListNode.java @@ -0,0 +1,12 @@ +package 链表操作.q19_删除链表的倒数第N个节点; + + +public class ListNode { + int val; + ListNode next; + + ListNode(int x) { + val = x; + } +} + diff --git a/src/链表操作/q19_删除链表的倒数第N个节点/Solution.java b/src/链表操作/q19_删除链表的倒数第N个节点/Solution.java new file mode 100644 index 0000000..c64e885 --- /dev/null +++ b/src/链表操作/q19_删除链表的倒数第N个节点/Solution.java @@ -0,0 +1,25 @@ +package 链表操作.q19_删除链表的倒数第N个节点; + +/** + * 利用两个指针 o(n) + */ +public class Solution { + + public ListNode removeNthFromEnd(ListNode head, int n) { + ListNode dummy = new ListNode(0); + dummy.next = head; + ListNode first = dummy; + ListNode second = dummy; + + for (int i = 1; i <= n + 1; i++) { + first = first.next; + } + + while (first != null) { + first = first.next; + second = second.next; + } + second.next = second.next.next; + return dummy.next; + } +}