问题描述:给定一个链表,删除链表中倒数第n个节点,返回链表的头节点
样例:给出链表1->2->3->4->5->null和 n = 2.
删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.
实现思路:这个问题跟“链表倒数第n个节点”类似,此问题要返回头结点,所以重新定义了一个新结点,并让开始结点赋值给它,以便返回。
首先考虑了链表中只有一个结点这种情况,此时删除元素,只能返回NULL;然后后续操作就是遍历链表求其长度,按位查找。
实现代码:
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param head: The first node of linked list.
* @param n: An integer.
* @return: The head of linked list.
*/
ListNode *removeNthFromEnd(ListNode *head, int n) {
int length=0;
int i=1;
ListNode *dummy=new ListNode(0);
ListNode *p;
p=head;
dummy=head;
if(head->next==NULL)
{return NULL;}
while(head!=NULL)
{length++;
head=head->next;}
if(length==n)
{
return dummy->next;
}
while(i<length-n)
{
p=p->next;
i++;
}
p->next=p->next->next;
return dummy;
}
};
做题感想:这个题目虽然已经做过一个类似的,但是改了很多遍,老是在指针的指向发生问题,数据测试的时候能过,但是提交上就是RunTime Eiror。还是要考虑好指针的问题,注意循环体的判断条件。