zoukankan      html  css  js  c++  java
  • 剑指offer-面试题18-删除链表的节点-链表

    /*
    题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。
    */
    /*
    思路:
    	将要删除的节点的下一个节点的value和next复制过来,删除下一个节点。
    	考虑两种特殊情况:
    		节点为尾结点,则需要从头遍历。
    		节点既是尾结点也是头结点,需要将头节点指向的内容置为空。
    */
    struct ListNode{
    	int value;
    	ListNode* next;
    };
    
    void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted){
    	if(!pListHead || !pToBeDeleted){
    		throw("invalid parameters");
    	}
    	//要删除的节点既是头结点,又是尾结点
    	if(*pListHead== pToBeDeleted && !pToBeDeleted->next){
            *pListHead = nullptr;
            delete pToBeDeleted;
            pToBeDeleted = nullptr;
    	}else if(!pToBeDeleted->next){//要删除的节点是尾结点if
    
    		ListNode* pNode = *pListHead;
    		while(!pNode->next->next){
    			pNode = pNode->next;
    		}
    		pNode->next = nullptr;
            delete pToBeDeleted;
    		pToBeDeleted = nullptr;
    	}else{
            ListNode *nextNode = pToBeDeleted->next;
            pToBeDeleted->value = nextNode->value;
            pToBeDeleted->next = nextNode->next;
            delete nextNode;
            nextNode = nullptr;
    	}
    
    }
    

       

  • 相关阅读:
    查找算法:二分查找法(折半查找)
    钞票找零-贪心,动态规划算法
    PHP7与php5
    网站高并发解决方案(理论知识) 二
    loj#6566. 月之都的密码
    我的 Linux 配置
    CTSC2011 幸福路径
    WC2018 即时战略
    uoj#460 新年的拯救计划
    bzoj 5016 一个简单的询问
  • 原文地址:https://www.cnblogs.com/buaaZhhx/p/11876852.html
Copyright © 2011-2022 走看看