題目是這樣的


這是我的代碼
#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int data;
struct Node *pNext;
}NODE,*PNODE;
PNODE create_list(int n)
{
int i;
int val;
PNODE pHead = (PNODE)malloc(sizeof(NODE));
if (NULL == pHead)
{
printf("分配失敗, 程式終止!\n");
exit(-1);
}
PNODE pTail = pHead;
pTail->pNext = NULL;
for (i=0; i<n; ++i)
{
scanf("%d", &val);
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew)
{
printf("分配失敗, 程式終止!\n");
exit(-1);
}
pNew->data = val;
pTail->pNext = pNew;
pNew->pNext = NULL;
pTail = pNew;
}
return pHead;
}
void traverse_list(PNODE pHead)
{
PNODE p = pHead->pNext;
while(p!=NULL)
{
printf("%d ",p->data);
p = p->pNext;
}
printf("\n");
return;
}
void sort(PNODE pHead,int x)
{
int i=1;
PNODE p = (PNODE)malloc(sizeof(NODE));
p = pHead->pNext;
PNODE r = (PNODE)malloc(sizeof(NODE));
while(p!=NULL&&p->data>=x)
{
i++;
p = p->pNext;
}
r->data = x;
r->pNext = p->pNext;
p->pNext = r;
if(i==1)
{
r->data = x;
r->pNext = p;
pHead->pNext = r;
}
printf("%d",i);
}
int main()
{
int n,x;
PNODE pHead = NULL;
while(scanf("%d",&n)!=EOF)
{
pHead =create_list(n);
scanf("%d",&x);
if(n==0)
{
printf("%d",&x);
}
else
{
sort(pHead,x);
traverse_list(pHead);
}
}
return 0;
}
編譯沒錯 代碼運行超時停不下來= =看了半天還是沒懂為什么錯了 求助大佬們
uj5u.com熱心網友回復:
#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int data;
struct Node *pNext;
}NODE,*PNODE;
PNODE create_list(int n)
{
int i;
int val;
PNODE pHead = (PNODE)malloc(sizeof(NODE));
if (NULL == pHead)
{
printf("分配失敗, 程式終止!\n");
exit(-1);
}
PNODE pTail = pHead;
pTail->pNext = NULL;
for (i=0; i<n; ++i)
{
scanf("%d", &val);
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (NULL == pNew)
{
printf("分配失敗, 程式終止!\n");
exit(-1);
}
pNew->data = val;
pNew->pNext = NULL;
pTail->pNext = pNew;
pTail = pNew;
}
return pHead;
}
void traverse_list(PNODE pHead)
{
PNODE p = pHead->pNext;
while(p!=NULL)
{
printf("%d ",p->data);
p = p->pNext;
}
printf("\n");
return;
}
void sort(PNODE pHead,int *x)
{
int i=1;
//PNODE p = (PNODE)malloc(sizeof(NODE));
PNODE p;
PNODE r = (PNODE)malloc(sizeof(NODE));
if (!r)
exit(0);
r->data = *x;
//r->pNext = NULL;
//p = pHead->pNext;
p = pHead;
//while(p!=NULL&&p->data>=x)
while(p->pNext && p->pNext->data <= *x)
{
i++;
p = p->pNext;
}
r->pNext = p->pNext;
p->pNext = r;
*x = i;
#if 0
r->data = x;
r->pNext = p->pNext;
p->pNext = r;
if(i==1)
{
r->data = x;
r->pNext = p;
pHead->pNext = r;
}
printf("%d",i);
#endif
}
int main()
{
int n,x;
PNODE pHead = NULL;
while(scanf("%d", &n)!=EOF)
{
pHead =create_list(n);
scanf("%d",&x);
if(n==0)
{
//printf("%d", &x);
printf("%d", x);
}
else
{
sort(pHead, &x);
printf("%d\n", x);
traverse_list(pHead);
}
}
return 0;
}
供參考~
樓主判斷有問題,
//while(p!=NULL&&p->data>=x)
while(p->pNext && p->pNext->data <= *x)
是>=x還是<=x的問題。
其他問題建議對比代碼找一下自己的問題~
這里的x我用指標,目的是獲取位置資訊~
uj5u.com熱心網友回復:
謝謝哇終于搞明白了這個代碼了!感謝!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/193132.html
標籤:C語言
上一篇:可以通過C++呼叫JAVA把一系列資料放到xls或者xlsx檔案里么
下一篇:這個運算式是啥子意思嘞
