每日算法:删除链表的倒数第N个节点

微信公众号:你好面试官
这里没有碎片化的知识,只有完整的知识体系。
专注于系统全面的知识点讲解,面试题目解析;
如果你觉得文章对你有帮助,欢迎关注、分享、赞赏

###今日题目

删除链表的倒数第N个节点

LeetCode地址

题目描述

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
给定的 n 保证是有效的。

Java解法:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
         if(head == null)
           return null;
       ListNode dummyHead = new ListNode(0);
       dummyHead.next = head;
       ListNode fast = dummyHead,slow = dummyHead;
       
       while(n>=0){
           fast = fast.next;
           n--;
       }
       
       while(fast != null){
           slow = slow.next;
           fast = fast.next;
       }
       slow.next = slow.next.next;
       return dummyHead.next;
    }
}

Python解法:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def removeNthFromEnd(self, head, n):
        """
        :type head: ListNode
        :type n: int
        :rtype: ListNode
        """
        tmp=ListNode(0)
        tmp.next=head 
        x,y=tmp,tmp
        
        for i in range(n+1):
            y=y.next
            
        while y:
            x=x.next
            y=y.next
        
        x.next=x.next.next
        
        return tmp.next


这里没有碎片化的知识,只有完整的知识体系。
专注于系统全面的知识点讲解,面试题目解析;
如果你觉得文章对你有帮助,欢迎关注、分享、赞赏

你可能感兴趣的:(每日算法:删除链表的倒数第N个节点)