指针——可能我学的还只是c++的皮毛
Posted whff521
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针——可能我学的还只是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
指向链表的头结点,如果链表为空,head
为NULL
显然,为了完成该链表维护工作,你需要实现上述两个辅助函数
插入操作中:
tar
,val
表示将存放新值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;
&取地址
以上是关于指针——可能我学的还只是c++的皮毛的主要内容,如果未能解决你的问题,请参考以下文章