zoukankan      html  css  js  c++  java
  • 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。

    链表结构如下:

    typedef struct Node{
        int num;
        struct Node *next;
    }NodeHead,*Nodes;

    删除函数如下:

    void DeleteNode(Nodes head,Nodes target)

    很简单的想法就是,要删除该结点,可以把该结点的下一个结点的值赋给该结点,接着删除下一个结点即可。

    但要考虑三种情况,一是该结点是尾结点,二是除了头结点以外,只有一个结点,三是只有头结点,不过这样那就直接返回就可以啦。

    以下是代码,很简单,就不需要注释了,只要把以上三种情况都考虑进去,就可以了。

    #include <stdio.h>
    #include <string.h>
    
    typedef struct Node{
        int num;
        struct Node *next;
    }NodeHead,*Nodes;
    
    void DeleteNode(Nodes head,Nodes target){
        
        if(head->next==NULL)
            return ;
        if(target->next==NULL){
            if(head->next==target){
                head->next = NULL;
                free(target);
            }else{
                Nodes tmp = head->next;
                while(tmp->next!=target){
                    tmp = tmp->next;
                }
                tmp->next = NULL;
                free(target);
            }
            return ;
        }
        Nodes tmp = target->next;
        target->num = tmp->num;
        target->next = tmp->next;
        free(tmp);
        
    }
    
    void main()
    {
        
        Nodes head = NULL;
         head = (Nodes)malloc(sizeof(NodeHead));
        head->next = NULL;
        int i ;
        for(i = 0 ;i < 4 ; i++){
            Nodes node = (Nodes)malloc(sizeof(NodeHead));
            node->num = i;
            node->next = head->next;
            head->next = node;
        }
        Nodes tmp;
        tmp = head->next;
        tmp = tmp->next;
        tmp = tmp->next;
        DeleteNode(head,tmp);
        
        
        Nodes tmp2;
        tmp2 = head->next;
        for(i = 0 ; i <3 ; i++){
            printf("%d",tmp2->num);
            tmp2 = tmp2->next;
        }
    
        
        return 0;
    }
  • 相关阅读:
    正则表达式
    Newtonsoft.Json
    MVC之参数验证(三)
    MVC之参数验证(二)
    MVC之参数验证(一)
    MVC之模型绑定
    导致存储过程重新编译的原因
    IFormattable,ICustomFormatter, IFormatProvider接口
    oracle将id串转换为名字串
    oracle查看表空间大小及使用情况
  • 原文地址:https://www.cnblogs.com/CloudStrife/p/7269539.html
Copyright © 2011-2022 走看看