码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode]Remove Nth Node From End of List

时间:2017-04-06 23:23:55      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:print   pass   remove   his   this   turn   span   include   code   

提米:删除链表从尾部到头部第N的节点。

思路:

两个指针,一个从头开始前移N个节点后,第二个指针开始移动,当第一指针移动到末尾时,第二个指针指向的是从尾部到头部的第N个节点。

注意:

1.N不合法,大于链表长度

2.要删除的是头结点

/*****************************************************************************************
Given a linked list, remove the nth node from the end of list and return its head.
For example,
   Given linked list: 1->2->3->4->5, and n = 2.
   After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Try to do this in one pass.
*****************************************************************************************/
#include<stdio.h>

struct ListNode {
    int val;
    struct ListNode *next;
};

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
        if(n <= 0)return head;
        struct ListNode *p = head;
    for(;n > 0 && p!= NULL;n--)p = p->next;
    
    if(n > 0)return head;//n过大,比链表的实际长度大
    if(p == NULL){//要删除的是头结点
        p = head;
        head = head->next;
        free(p);
        return head;
    }

    struct ListNode *f = head;//第二个指针
    while(p->next != NULL){//两个指针一起移动
        p = p->next;
        f = f->next;
    }
    p = f->next;
    f->next = p->next;
    free(p);
    return head;
}

void main(){
    int k = 5;
    struct ListNode *l = (struct ListNode *)malloc(sizeof(struct ListNode));
    l->val = k;
    l->next = NULL;
    while(k--){
        struct ListNode *p = (struct ListNode *)malloc(sizeof(struct ListNode));
        p->val = k;
        p->next = l;
        l = p;
    }

    struct ListNode *r = l;
    while(r != NULL){
        printf("%d ",r->val);
        r = r->next;
    }
    printf("\n");

    r = removeNthFromEnd(l,3);
    
    while(r != NULL){
        printf("%d ",r->val);
        l = r;
        r = r->next;
        free(l);
    }
}

 

[LeetCode]Remove Nth Node From End of List

标签:print   pass   remove   his   this   turn   span   include   code   

原文地址:http://www.cnblogs.com/yeqluofwupheng/p/6675892.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!