zoukankan      html  css  js  c++  java
  • 指针——可能我学的还只是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;

    &取地址

     
  • 相关阅读:
    为了我们自己的利益,请不要去支持番茄花园。
    游戏版本比较的算法[ZZ]
    DXUT框架剖析(9)
    强制删除任意文件以及文件夹
    安全幻想曲2008
    DXUT框架剖析(12)
    DXUT框架剖析(6)
    [Ph4nt0m] [zz]The Emergence Of A Theme
    俄国农民乘法
    写在msn签名上的I'M 计划
  • 原文地址:https://www.cnblogs.com/WHFF521/p/11223735.html
Copyright © 2011-2022 走看看