zoukankan      html  css  js  c++  java
  • 删除链表的倒数第n个结点

    Given a linked list, remove the n-th node from the end of list and return its head.

    Example:

    Given linked list: 1->2->3->4->5, and n = 2.
    
    After removing the second node from the end, the linked list becomes 1->2->3->5.
    

    Note:

    Given n will always be valid.

    Follow up:

    Could you do this in one pass?

     题意:删除链表的倒数第n个结点,并返回链表的头指针
     
    思路一:将倒数第n个转换成正数第(链表长度-n+1)个
    class Solution {
    public:  
        ListNode* removeNthFromEnd(ListNode* head, int n) {
            //删除倒数第n个转化为,删除正数第几个
            //要考虑比较多的特殊情况,head==NULL head->next==NULL
            //还有len-n==0的
            int len1=len(head);
            if(head==NULL ||head->next==NULL) return NULL;
            ListNode *p;
            p=head;
            if(len1-n==0)   head=head->next;
            else{
                 for(int i=1;i<len1-n;i++){
                    p=p->next;
                 }
                 p->next=p->next->next;
                }
                return head;    
        }
        int len(ListNode *Head)
        {
            int count=0;
            while(Head!=NULL){
                Head=Head->next;
                count++;
            }
            return count;
        }
    };

    思路二:设置两个指针,一个先走n步,然后两个指针再一起走,等第一个指针到达链表最后一个结点,另一个指针指向结点的下一个结点,就是需要删除的倒数第n个结点

    class Solution {
    public:
        ListNode* removeNthFromEnd(ListNode* head, int n) {
            ListNode *p1,*p2;
            p1=head;
            p2=head;
            if(head==NULL || head->next==NULL) return NULL;
            while(n--){
                p1=p1->next;
            }
            if(p1==NULL) return head->next; //这种情况直接return,不要只是修改head,这样后面继续运行会出错
            while(p1->next!=NULL){
                p1=p1->next;
                p2=p2->next;
            }
            p2->next=p2->next->next;
            return head;
        }
    };
  • 相关阅读:
    洛谷 P2327 [SCOI2005]扫雷 题解
    P1388 算式 题解
    P1281 书的复制 题解
    P2896 [USACO08FEB]一起吃饭Eating Together 题解
    P1140 相似基因 题解
    变量的解构赋值
    let 和 const 命令
    第一阶段站立会议8
    第一阶段站立会议7
    第一阶段站立会议6
  • 原文地址:https://www.cnblogs.com/Bipolard/p/9988870.html
Copyright © 2011-2022 走看看