注册 登录
编程论坛 数据结构与算法

在vc中运行为什么不对啊,求改

漠河C 发布于 2017-09-25 20:10, 1966 次点击
假设在长度大于 1 的单循环链表中,既无头结点也无头指针。s 为指向某
个结点的指针,试编写算法删除结点*s 的直接前驱结点。

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
 
#define OK 1
#define OVERFLOW -2
#define ERROR 0
 
typedef int ElemType;
typedef int Status;
 
typedef struct LNode{
   ElemType data;
   struct LNode *next;
 }LNode,*LinkList;
///创建链表
Status CreateList(LinkList &L,int n)
{
   int i;
   L=(LinkList)malloc(sizeof(LNode));
   LinkList L1=L;
   if(!L)exit(ERROR);
        
   L1->next=NULL;
   printf("Please input numbers:\n");
   for(i=0;i<n;i++)
   {  
      scanf("%d",&L1->data);
      if(i==n-1)
          L1->next=L;//L1->next=NULL;
      else
      {
        LinkList p=(LinkList)malloc(sizeof(LNode));
        L1->next=p;
        L1=p;
      }
    }
    return OK;
}
///输出元素
Status PrintList(LinkList L,int m)
{
  int i=1;
  printf("The numbers are:");
  while(L)
  {
    printf("%d ",L->data);
    if(i>=m) break;
    if(L->next)
            {L=L->next;i++; }
    else
        break;
  }
  printf("\n");
  return OK;
}
 ///删除结点*s 的直接前驱结点
Status DeleteList(LinkList &L,LinkList s)
{
  //int locat=0;
  LinkList p,q;//=(LinkList)malloc(sizeof(LNode));
  p=s;
  //LinkList s=(LinkList)malloc(sizeof(LNode));
  //s->data=e;
  while(p->next->next!=s)
  {
    q=p;
    p=p->next;
    free(s);
    return OK;
  }
  q->next=s;
  free(q);
  return OK;
}  
 
//主函数
 int main()
 {
     int n,slocat;
     ElemType e;
     LinkList L,s;
     printf("Please input the number you need:");
     scanf("%d",&n);
     CreateList(L,n);
     PrintList(L,n);
     printf("请输入结点S的位置:");
     scanf("%d",&slocat);
     DeleteList(L,s);
     n=n-1;
     PrintList(L,n);
     system("pause");
 }
 

0 回复
1