永发信息网

建立带头节点的单链表,在单链表的第i节点之前插入一个新节点,删除第i个节点,用c语言写、拜托了

答案:1  悬赏:40  手机版
解决时间 2021-11-25 00:02
  • 提问者网友:练爱
  • 2021-11-24 07:47
建立带头节点的单链表,在单链表的第i节点之前插入一个新节点,删除第i个节点,用c语言写、拜托了
最佳答案
  • 五星知识达人网友:千杯敬自由
  • 2021-11-24 08:34
#include 
#include 
#include 

typedef struct LinkNode 
{
int data;
struct LinkNode *pNext;
}LinkNode,*PNode;

//insert with positon
bool insert( LinkNode *pHead, int data, int iPos)
{
LinkNode *p=NULL, *pTmp=NULL ;
LinkNode* pNewNode = (LinkNode *)malloc(sizeof(LinkNode));
pNewNode->data = data;
pNewNode->pNext = NULL;

p = pHead;
while ((iPos-1) && p->pNext){
p = p->pNext;
iPos--;
}

if (p->pNext == NULL){
p->pNext = pNewNode;
pNewNode->pNext = NULL;
}else{
pTmp = p->pNext;
p->pNext = pNewNode;
pNewNode->pNext = pTmp;
}

return true;
}

//delete with position
bool deletefun(LinkNode *pHead, int iPos)
{
LinkNode *p = pHead, *pTemp=NULL;
if (p->pNext ==NULL)
return true;

while ((iPos-1) && p->pNext->pNext)
{
p = p->pNext;
iPos--;
}

pTemp =  p->pNext;
if (p->pNext->pNext != NULL){
p->pNext = p->pNext->pNext;
free(pTemp);
}else{
free(p->pNext);
p->pNext = NULL;
}
return true;
}

void PrintLink(const LinkNode *pHead)
{
LinkNode *p = pHead->pNext;
while (p)
{
printf("%d ",p->data);
p = p->pNext;
}
printf("
");
}

int main()
{
LinkNode obHead;
obHead.pNext = NULL;
insert(&obHead,10,1);
insert(&obHead,100,1);
insert(&obHead,1000,1);
insert(&obHead,10000,1);
insert(&obHead,100000,1);
insert(&obHead,333,2);
PrintLink(&obHead);
deletefun(&obHead,2);
PrintLink(&obHead);
return 0;
}追问运行有错误啊追答我是在c++环境下编译的,又修改了一下,你再看看,如果有错误,发一下错误给我看看,我本地正常追问
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯