IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]LeetCode -- Remove Nth Node From End of List

    csharp25发表于 2015-09-19 16:21:15
    love 0
    移除链表的倒出第n个节点。


    思路:


    本题还是考察链表的删除操作,如果要删除节点h:


    如果h不是最后节点,
    h.val = h.next.val;
    h.next = h.next.next;


    如果h为最后节点,
    h = null;


    第一次遍历找到倒数第n个为正数第几,然后找到删除的点直接删除就可以了。




    实现代码:



    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     public int val;
     *     public ListNode next;
     *     public ListNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public ListNode RemoveNthFromEnd(ListNode head, int n) {
            
             if(head == null){
                return null;
            }
            
            if(n == 1 && head.next == null){
                return null;
            }
            
           var len = 0;
           var h = head;
           while(head != null){
               head = head.next;
               len ++;
           }
           
           if(len - n < 0){
               return null;
           }
           var nth = len - n + 1;
           
           var tmp = h;
           if(nth < len){
    	   	var c = 1;
                while(c < nth){
                   h = h.next;
                   c ++;
                }
    			
                h.val = h.next.val;
                h.next = h.next.next;
           }else{
    	   		while(h.next.next != null) {
    				h = h.next;
    			}
               h.next = null;
           }
           
           return tmp;
        }
    }




沪ICP备19023445号-2号
友情链接