问题描述:给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。
样例
给出链表1->2->3->4->5->null和 n = 2.
删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.
解题思路:新定义一个链表,让新链表等于系统链表,先让新链表指针向后移动n,然后让新链表与系统链表一起循环,将系统链表的指针的值给另一个新链表,当循环完成时将系统链表的值(要删除的)的下一些给刚才定义的链表。
实验代码:
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 *xin ,*q,*p,*y;
xin=head;
q=head;
p=new ListNode;
y=p;
if(n<=0)
{return NULL;}
for(int i=1;i<=n;i++)
{
xin=xin->next;
}
if(xin==NULL)
p->next=head->next;
int k=1;
while(xin!=NULL)
{
xin=xin->next;
ListNode *x;
x=new ListNode(q->val);
p->next=x;
p=x;
q=q->next;
if(xin==NULL)
p->next=q->next;
}
return y->next;
}
};
个人感悟:这种做法有一种特殊情况,当n的值等于系统链表长度时不行,所以要另加一种情况判断,用来解决这一种情况。