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

本题要求实现一个函数,删除单链表的第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 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容