删除链表倒数第n个节点
解法一:
直接遍历出链表长度L,然后删除第L-n+1个节点即可:
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy = new ListNode(0, head);
int length = getLength(head);
ListNode cur = dummy;
for (int i = 1; i < length - n + 1; ++i) {
cur = cur.next;
}
cur.next = cur.next.next;
ListNode ans = dummy.next;
return ans;
}
public int getLength(ListNode head) {
int length = 0;
while (head != null) {
++length;
head = head.next;
}
return length;
}
}
解法二:
通过递归回溯遍历:
public ListNode removeNthFromEnd(ListNode head, int n) {
int traverse = traverse(head, n);
if(traverse == n)
return head.next;
return head;
}
private int traverse(ListNode node, int n) {
if(node == null)
return 0;
int num = traverse(node.next, n);
if(num == n)
node.next = node.next.next;
return num + 1;
}
收藏整理自LeetCode.