码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-07-20 16:20:51      阅读:173      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!