删除链表中倒数第n个结点

删除链表中倒数第n个结点

题目描述:给定一个链表,删除链表中倒数第n个结点,返回链表的头结点     如给定1->2->3->4->5->NULL和2,返回1->2->3->5->NULL.

解题思路:与返回链表中的倒数第n个结点值的那道题思路基本一样,从头到尾遍历一遍单链表,得到此链表的长度,从而得到倒数第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
          if(head->next==NULL&&n==1)  return NULL;
         ListNode *dummy=new ListNode(0);
                            ListNode *p=new ListNode(0);
       ListNode *q=new ListNode(0); 
        dummy->next=head;
          p->next=head;
        head=dummy;
       head=p;;
        int count,m,l;
                  count=0;l=0;
               while(head->next!=NULL){
           head=head->next;
                 count++;
       }
       m=count-n;
       if(m==0)  {p= dummy->next;   return p->next; }   //处理边界情况
              while(l<m) {
           dummy=dummy->next;
            l++;
        }
        q=dummy->next;
        dummy->next=q->next;
       delete q;
               return p->next;
             }
   };

A题感悟读完题只是有了大体的思路,还有一些细节需要处理,有的时候想不到的小细节往往是最大的障碍。前几次交这道题的时候全部都是 ERRORTIME,然后就一遍遍的改,渐渐的完善自己的代码。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值