给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
本节使用了两种方法,双指针和遍历计算长度然后通过长度找到跳过的节点的方法
双指针的方法,先定义一个虚拟的节点,连在头节点之前。
然后让快指针先走n个节点,然后两个一起走,快指针走完的时候,说明要删除的节点到了。
然后删除这个节点,返回虚拟节点的下一个节点。
public ListNode removeNthFromEnd(ListNode head, int n){
ListNode dummyNode = new ListNode(0);
dummyNode.next = head;
ListNode slow = dummyNode;
ListNode fast = dummyNode;
while (n-- > 0){
fast = fast.next;
}
ListNode prev = null;
while (fast != null){
prev = slow;
slow = slow.next;
fast = fast.next;
}
prev.next = slow.next;
slow.next = null;
return dummyNode.next;
}
使用遍历的方法
使用遍历的方法,先找到链表的长度,存起来。
然后通过长度和n,找到要删除的节点的位置。然后删除。
public ListNode removeNthFromEnd1(ListNode head, int n){
ListNode cur = head;
ListNode dummyNode = new ListNode(0);
dummyNode.next = head;
int size = 0;
while (cur != null){
cur = cur.next;
size++;
}
System.out.println(size);
ListNode cur1 = dummyNode;
if (size < 2 && n >= 1){
dummyNode.next = null;
return dummyNode.next;
}
for(int i = 0; i
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)