您的位置:首页 > 其它

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

2017-03-25 16:59 260 查看

删除链表中倒数第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,然后就一遍遍的改,渐渐的完善自己的代码。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: