问题遇到的现象和发生背景
在输出完所有小于X的节点后会莫名其妙打印一个地址。
问题相关代码,请勿粘贴截图
#include
#include <stdlib.h>
#define MaxSize 10
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}LinkNode;
void InitList(LinkNode *&L)
{
L=(LinkNode *)malloc(sizeof(LinkNode));
if(L==NULL)
{
printf("内存分配失败!!\n");
exit(0);
}
L->next==NULL;
}
void creatList(LinkNode *&L,ElemType a,int n)//n为索要创建的元素个数, 尾插法
{
int i;
LinkNode *s,*r;
r=L;//r为尾指针
for(i=0;i<n;i++)
{
s=(LinkNode *)malloc(sizeof(LinkNode));
s->data=a;
r->next=s;
r=s;
}
r->next=NULL;
}
void printlist(LinkNode &L)
{
struct Node pmove=L->next;
while(pmove)
{
printf("%d\t",pmove->data);
pmove=pmove->next;
}
printf("\n");
}
bool InsertNode(LinkNode *&L,ElemType i,ElemType a)//i为要插入的位置,a为要插入的元素
{
int j=0;
LinkNode *pmove=L;//遍历指针
LinkNode *newNode;
if(i<1)
{
return false;
}
while(j<i-1&&pmove!=NULL)
{
pmove=pmove->next;
j++;
}
if(pmove==NULL)
{
printf("无法插入,位置溢出\n");
}
newNode=(LinkNode *)malloc(sizeof(LinkNode));
newNode->data=a;
newNode->next=pmove->next;
pmove->next=newNode;
printf("插入成功\n");
return true;
}
bool ListDelete(LinkNode * &L,int i){
int j = 0;
LinkNode *p=L,*q;
if(i<1){
printf("i值错误\n");
return false;
}
while(j<i-1 && p!=NULL){
j++;
p=p->next;
}
if(p == NULL){ //p=null只有两种情况,一种是L表为空,另一种是遍历完整个链表
//没发现第i-1个结点
printf("不存在这个结点\n");
return(false);
}
q=p->next; //q指向第i个结点
if(q == NULL){ //p=null只有两种情况,一种是L表为空,另一种是遍历完整个链表
//没发现第i个结点
printf("不存在这个结点\n");
return(false);
}
p->next=q->next; //第i-1个结点p接到第i+1个结点
free(q);
printf("删除成功!!\n");
return(true);
}
//释放单链表
void DestoryList(LinkNode * &L){
LinkNode *p=L; //从头指针开始释放,p用来释放指针
LinkNode *s=p->next; //s用来保存下一个结点地址
while(s != NULL){
free(p);
p=s;
s=p->next;
}
free(p);
}
LinkNode partition(LinkNode &L, int x) {
LinkNode small = (LinkNode )malloc(sizeof( LinkNode));
LinkNode smallHead = small;
LinkNode large =(LinkNode ) malloc(sizeof( LinkNode));
LinkNode largeHead = large;
while (L != NULL) {
if (L->data < x) {
small->next = L;
small = small->next;
} else {
large->next = L;
large = large->next;
}
L = L->next;
}
large->next = NULL;
small->next = largeHead->next;
return smallHead;
}
int main()
{
LinkNode *L;
ElemType a,b,c;
InitList(L);
printf("请输入要插入的元素及个数:\n");
scanf("%d %d",&a,&b);
creatList(L,a,b);
InsertNode(L,2,3);
printlist(L);
printf("请输入你要删除的位置:\n");
scanf("%d",&c);
ListDelete(L,c);
printlist(L);
printf("交换后:\n");
LinkNode *p=partition(L,3);
printlist(p);
}