• 指针——可能我学的还只是c++的皮毛


    C. 线性链表的插入与删除

    单点时限: 2.0 sec

    内存限制: 256 MB

    实现线性链表的插入与删除操作

    只需完成给定函数的定义。

    NODE* insertLinklist(NODE* head, int tar, int val) {
       // TODO
    }
    
    NODE* deleteLinklist(NODE* head, int tar) {
       // TODO
    }
    

    其中

    NODE表示链表的结构体,定义如下

    typedef struct node
    {
        int data;   //存储数据
        struct node* next;  //指向下一个节点的指针
    } NODE;
    

    head指向链表的头结点,如果链表为空,headNULL

    显然,为了完成该链表维护工作,你需要实现上述两个辅助函数

    插入操作中:

    tarval表示将存放新值val的节点插入到值为tar的节点之后

    (保证当链表不为空时,值为tar的节点一定在链表中,若有多个节点存放的值都为tar,则插入到第一个之后,若链表为空,则无视tar值,将val插入到head后面,即将head指向这个新的节点)

    删除操作中:

    tar表示删除存放值为tar的节点(若有多个节点存放的值是tar,则删除第一个)

    如果链表为空则忽略当前操作

    提示

    只能使用C或者C++提交。

    对于C/C++,判题程序类似,如下:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct node
    {
        int data;
        struct node* next;
    } NODE;
    
    NODE* insertLinklist(NODE* head, int tar, int val);
    NODE* deleteLinklist(NODE* head, int tar);
    
    /* 你的代码将会被嵌入在这个位置 */
    
    int main()
    {
        /* 输入及其他处理,细节隐藏不表 */
    
        NODE* head = createLinklist(/* 创建链表,细节隐藏不表 */);    
    
        for (/* 若干操作,细节隐藏不表 */)
            if(/* 判断插入还是删除,细节隐藏不表 */)
                head = insertLinklist();
            else
                head = deleteLinklist();
    
        /* 后续判题,细节隐藏不表 */
    
        return 0;
    }
    

    虽说这只是一道不考的水题,但是弄得我头都大了;
    NODE* insertLinklist(NODE* head, int tar, int val) 
    {
        if(head==NULL)//
        {
            NODE* p=(NODE*)malloc(sizeof(NODE));
            p->data=val;
            p->next=NULL;
            head=p;
        }
        else
        {
            NODE* p=head;
            NODE* pnew=(NODE*)malloc(sizeof(NODE));//动态申请指针 
            while(p->data!=tar)
            {
                p=p->next;
            }
            pnew->data=val;
            pnew->next=p->next;
            p->next=pnew;
        }
        
        return head;
    } 
    
    NODE* deleteLinklist(NODE* head, int tar)
    {
        if(head==NULL) return head;
        if(head->data==tar)
        {
            head=head->next;
            return head;
        }
        NODE* last=head;
        NODE* now=head->next;
        while(now->data!=tar)
        {
            now=now->next;
            last=last->next;
        }
        last->next=now->next;
        return head;
    }

    指针还是用->吧,不然会CE;

    NODE* p和NODE *p等价,看习惯;

    还有要注意指针=指针,类型要看好;

    如果要找到一个变量的地址,用int *p=&a;

    &取地址

     
  • 相关阅读:
    poj3278 Catch That Cow
    poj2251 Dungeon Master
    poj1321 棋盘问题
    poj3083 Children of the Candy Cor
    jvm基础知识—垃圾回收机制
    jvm基础知识1
    java面试基础必备
    java soket通信总结 bio nio aio的区别和总结
    java scoket aIO 通信
    java scoket Blocking 阻塞IO socket通信四
  • 原文地址:https://www.cnblogs.com/WHFF521/p/11223735.html
Copyright © 2020-2023  润新知