zoukankan      html  css  js  c++  java
  • LeetCode--019--删除链表的倒数第N个节点(java)

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

    示例:

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

    说明:

    给定的 n 保证是有效的。

    进阶:

    你能尝试使用一趟扫描实现吗?

    用两个节点fast和slow,先让fast走n步,然后slow和fast一起走,等fast走到最后一个节点时,slow所在位置就是要删除的前一个节点。其他注意的就是抠边界了。

     1 /**
     2  * Definition for singly-linked list.
     3  * public class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode(int x) { val = x; }
     7  * }
     8  */
     9 class Solution {
    10     public ListNode removeNthFromEnd(ListNode head, int n) {
    11         ListNode fast = head,slow = head;
    12         
    13         while(n > 0){
    14             n--;
    15             fast = fast.next;
    16         }
    17         while(fast!=null && fast.next!=null){
    18             fast = fast.next;
    19             slow = slow.next;
    20         }
    21         if(fast == null){//fast为空有两种情形1.[1] n = 1   2.[1,2,3,4] n = 4分别对应下面的else 和 if
    22             if(head != null && head.next!=null){
    23                 head = head.next;
    24                 return head;
    25             }else{
    26                 head = null;
    27                 return head;
    28             }
    29             
    30         }
    31             fast = slow.next;
    32             slow.next = fast.next;
    33         return head;
    34     }
    35 }

    2019-04-17 21:59:17

    双指针python版本

     1 class Solution:
     2     def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
     3         q1 = ListNode(-1)
     4         q2 = ListNode(-1)
     5         q1=head
     6         q2=head
     7         i = n
     8         while i>0:
     9             q1=q1.next
    10             i-=1
    11         if n==1 and q1==None:  #只有一个节点的情况
    12             return q1
    13         elif q1==None:#删除第一个节点的情况
    14             return head.next
    15         while q1.next!=None: #其他情况
    16             q1 = q1.next
    17             q2 = q2.next
    18         q2.next =q2.next.next
    19         return head

    2019-11-30 09:18:02

    递归版:  

     1 class Solution:
     2     def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
     3         def help(node):
     4             if not node:
     5                 return 0
     6             i = help(node.next)+1
     7             if i>n:
     8                 node.next.val=node.val
     9             return i
    10         help(head)
    11         return head.next

  • 相关阅读:
    Linux培训教程lgzip命令详解和使用实例
    Linux 新手应该知道的一些求助命令
    “变态教育创导者”兄弟连教育新三板挂牌上市
    linux中more命令如何使用
    html上标与下标应用
    linux命令大全之cal命令详解(显示日历)
    成为java高手的八大条件
    mysql 1055
    MySQL更改口令报错ERROR 1064
    centos7.5 安装mysql8.0
  • 原文地址:https://www.cnblogs.com/NPC-assange/p/10726526.html
Copyright © 2011-2022 走看看