标题:假设在长度大于 1 的单循环链表中,既无头结点也无头指针。
只看楼主
漠河C
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2017-9-11
结帖率:50%
已结贴  问题点数:20 回复次数:1 
假设在长度大于 1 的单循环链表中,既无头结点也无头指针。
假设在长度大于 1 的单循环链表中,既无头结点也无头指针。s 为指向某
个结点的指针,试编写算法删除结点*s 的直接前驱结点。
在vc中运行为什么不对啊啊

#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");
 }
 

搜索更多相关主题的帖子: 结点 malloc int next printf 
2017-09-25 20:08
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:20 
这样可否:
#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)
Status CreateList(LinkList *L,int n)
{
    int i;
    LinkList p, L1;
    if ((p=(LinkList)malloc(sizeof(LNode))) == NULL)
        exit(ERROR);
    printf("Please input numbers:\n");
    scanf("%d", &p->data);
    *L = L1 = p;
    for(i=1; i<n; ++i)
    {
        if ((p=(LinkList)malloc(sizeof(LNode))) == NULL)
            exit(ERROR);
           scanf("%d", &p->data);
        p->next = *L;
        *L = p;
    }
    L1->next = p;
    return OK;
}
///输出元素
Status PrintList(LinkList L,int m)
{
    int i=0;
    printf("The numbers are:");
    for(i=0; i<m; ++i,L=L->next)
        printf("%d ",L->data);
    printf("\n");
    return OK;
}
///删除结点*s 的直接前驱结点
//Status DeleteList(LinkList &L,int m)
Status DeleteList(LinkList *L,int m)
{
    LinkList p=(*L)->next, q;
    for (q=*L; q->next!=*L; q=q->next) NULL;
    int i;
    for(i=0; i<m-1; ++i,*L=(*L)->next)
    {
        q = *L;
        p = (*L)->next->next;
    }
    q->next = p;
    free(*L);
    *L = p;
    return OK;
}

//主函数
int main()
{
    int n,m;
    ElemType e;
    LinkList L,s;
    printf("Please input the number you need:");
    scanf("%d",&n);
    CreateList(&L,n);
    PrintList(L,n);
    while (n)
    {
        printf("请输入结点S的位置:");
        scanf("%d",&m);
        DeleteList(&L,m);
        --n;
        PrintList(L,n);
    }
    system("pause");
}
2017-09-26 10:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-480948-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.176755 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved