#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;
}
/* 请在这里填写答案 */
//此处开始就是我填写的答案。
Node *deletelink(Node *head, int i)
{
Node* p=head;
Node* tail=head;
int count=0,j=1;
while(p!=NULL)
{
count++;
p=p->next;
}
p=head;
if(i>count)
{
printf("error\n");
}
else
{
while(j<i)
{
j++;
p=tail;
tail=tail->next;
}
p->next=tail->next;
return head;
}
}
同样是一个链表的问题。这里我写的代码提示有个测试点是段错误,没想到。请加以指正。
#include <stdio.h>
#include <stdlib.h>
typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
ElementType Data;
PtrToNode Next;
};
typedef PtrToNode List;
List Read(); /* 细节在此不表 */
void Print( List L ); /* 细节在此不表 */
List Insert( List L, ElementType X );
int main()
{
List L;
ElementType X;
L = Read();
scanf("%d", &X);
L = Insert(L, X);
Print(L);
return 0;
}
/* 你的代码将被嵌在这里 */
//我的答案有测试点发生段错误
List Insert( List L, ElementType X )
{
List p=L;
List tail;
List track;//创建跟踪指针
tail=(List)malloc(sizeof(struct Node));//
tail->Data=X;
tail->Next=NULL;//创建要插入链表
while(p!=NULL)
{
if(p->Data<X)
{
track=p;
p=p->Next;
}
else break;
}//找到插入点
tail->Next=track->Next;
track->Next=tail;
return L;
}
希望可以得到完整详细解答,链表学的不是很懂。