qq_47847036 2022-04-24 20:42 采纳率: 71.4%
浏览 890
已结题

本题要求实现一个函数,删除单链表的第i个结点。

函数接口定义:
Node *deletelink(Node *head, int i)
在这里,head是单链表的头指针,i是待删除的结点编号。函数不需要处理单链表为空的情况。如果删除位置错误,输出"error"。

裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct ListNode {
int num;
struct ListNode *next;
}Node;

Node *createlist(); /根据用户输入的整数n,创建具有n个结点的单链表。裁判实现,细节不表/
Node *deletelink(Node *head, int i);
void display(Node *head);/输出链表结点的数据域。裁判实现,细节不表/

int main(void)
{
Node *head;
int i;
head = createlist();
scanf("%d",&i);
head = deletelink(head, i);
display(head);
return 0;
}

/* 请在这里填写答案 */
输入样例1:
5
10 5 4 8 7
2
输出样例1:
10 4 8 7
输入样例2:
5
10 5 4 8 7
6
输出样例2:
error
10 5 4 8 7

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-04-24 22:16
    关注

    供参考:

    Node *deletelink(Node *head, int i)
    {
        int j=0;
        if (i < 1){
            printf("error\n");
            return head;
        }
        Node *p = head,*pre = NULL;
        while(p && j < i - 1){
            pre = p;
            p = p->next;
            j++;
        }
        if (p == head){
            head = p->next;
            free(p);
        }
        else if (p == NULL){
            printf("error\n");
        }
        else {
            pre->next = p->next;
            free(p);
        }
        return head;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月23日
  • 已采纳回答 5月15日
  • 创建了问题 4月24日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改