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

满意答案

00e27ab806e4881f8254fe7ae8741834.png

218239安乐窝

2015.11.05

00e27ab806e4881f8254fe7ae8741834.png

采纳率:46%    等级:5

已帮助:406人

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586#include #include #include  typedef struct LinkNode {    int data;    struct LinkNode *pNext;}LinkNode,*PNode; //insert with positonbool 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 positionbool 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\t",p->data);        p = p->pNext;    }    printf("\n");} 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++环境下编译的,又修改了一下,你再看看,如果有错误,发一下错误给我看看,我本地正常

00分享举报

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是带头节点单链表创建、打印、插入第i个位置x、删除第i个位置元素的C语言代码: ```c #include <stdio.h> #include <stdlib.h> // 定义链表节点结构体 typedef struct ListNode { int val; struct ListNode* next; } ListNode; // 创建带头节点单链表 ListNode* createList() { ListNode* head = (ListNode*)malloc(sizeof(ListNode)); head->next = NULL; ListNode* tail = head; int x; while (scanf("%d", &x) != EOF) { ListNode* node = (ListNode*)malloc(sizeof(ListNode)); node->val = x; node->next = NULL; tail->next = node; tail = node; } return head; } // 打印带头节点单链表 void printList(ListNode* head) { ListNode* p = head->next; while (p != NULL) { printf("%d ", p->val); p = p->next; } printf("\n"); } // 插入第i个位置x void insert(ListNode* head, int i, int x) { ListNode* p = head; int j = 0; while (p != NULL && j < i - 1) { p = p->next; j++; } if (p == NULL || j > i - 1) { printf("插入位置无效\n"); return; } ListNode* node = (ListNode*)malloc(sizeof(ListNode)); node->val = x; node->next = p->next; p->next = node; } // 删除第i个位置元素 void delete(ListNode* head, int i) { ListNode* p = head; int j = 0; while (p != NULL && j < i - 1) { p = p->next; j++; } if (p == NULL || p->next == NULL || j > i - 1) { printf("删除位置无效\n"); return; } ListNode* q = p->next; p->next = q->next; free(q); } int main() { ListNode* head = createList(); printList(head); insert(head, 3, 100); printList(head); delete(head, 2); printList(head); return 0; } ``` 注意:这段代码只是一个示例,实际使用时需要根据具体需求进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值