首页 > 其他 > 详细

删除链表中倒数第k个节点

时间:2015-07-20 16:18:35      阅读:327      评论:0      收藏:0      [点我收藏+]

1. 问题描述

  给定一个单链表,删除它的倒数第k个节点。例如给定链表: 12345,删除它的倒数第二个节点后变为 1235。可以假设倒数第k个节点总是存在。


2. 方法与思路

  很容易想到第一种方法,就是先对单链表进行进行一次遍历,求出其长度n。然后再进行第二次遍历,设一个指针,向后移动n?k个位置,然后删除这个节点。
  第二种方法就是使用双指针,只需要对链表进行一遍访问即可。

  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;
    }

版权声明:本文为博主原创文章,未经博主允许不得转载。

删除链表中倒数第k个节点

原文:http://blog.csdn.net/jeanphorn/article/details/46969411

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!