给定一个单链表,删除它的倒数第k个节点。例如给定链表:
很容易想到第一种方法,就是先对单链表进行进行一次遍历,求出其长度n。然后再进行第二次遍历,设一个指针,向后移动
第二种方法就是使用双指针,只需要对链表进行一遍访问即可。
I. ListNode *p=*q=head
II. q指针后移k个位置
III. while q != end
p,q同时后移
IV. 删除p的下一个节点
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *pre=head,*end=head;
while(n--) end = end->next;
while(end && end->next) pre = pre->next,end = end->next;
if(end == NULL) return head->next;
else
{
ListNode *tmp = pre->next;
pre->next = tmp->next;
delete tmp;
}
return head;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/jeanphorn/article/details/46969411