删除链表的倒数第n个结点 Remove Nth Node From End of List

来源:互联网 发布:java web如何编译 编辑:程序博客网 时间:2024/05/29 07:05

题目源自于Leetcode。

题目:Given a linked list, remove the nth node from the end of list and return its head.只允许过一遍。

思路:注意当原链表节点个数小于n等于n的时候这两种特殊情况

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode *removeNthFromEnd(ListNode *head, int n) {        // Note: The Solution object is instantiated only once and is reused by each test case.        if(n<=0)            return head;        ListNode *pre, *p;        pre = p = head;        int i;        for(i=0;i<n;i++)            if(p->next!=NULL)                p = p->next;            else                break;        if(i<n-1)//原链表总个数小于n个            return head;        if(i == n-1)//原链表总个数等于n,即要删除链首结点        {            ListNode *tmp1 = head;            ListNode *tmp2 = head->next;            delete tmp1;            return tmp2;        }        while(p->next!=NULL)        {            p = p->next;            pre = pre->next;        }        ListNode *tmp = pre->next;        pre->next = tmp->next;        delete tmp;        return head;    }};


原创粉丝点击