1.问题描述:给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。
2.思路:首先要定义一个头指针并且要在头指针的前面加一个dummy,用来储存头指针,并且一定要把dummy赋值给head。这样如果删除的是第一个元素,还有保存头节点的dummy可以返回删除头节点后的链表。另外再定义length来计算链表中节点数,再从头节点开始遍历链表一直到要删除节点的前一个节点,再把该节点的next指向它的next的next,这样就把要删除节点删除了,最后用dummy->next返回头节点即可返回删除指定节点后的链表。
3.代码:
/** * 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) { // write your code here ListNode *p; ListNode *dummy=new ListNode(0); dummy->next=head; head=dummy; p=head; int length=0; while(p!=NULL) { p=p->next; length++; } for(int i=1;i<length-n;i++) { head=head->next; } head->next=head->next->next; return dummy->next; } };4.感想:这个程序比前几个链表的程序要复杂得多,并且当给定的样例调通的时候,发现1->NULL并不能调通!加上head=dummy就正确了!