163585580 发表于 2021-4-24 16:36

单链表--指定结点前插操作

本帖最后由 163585580 于 2021-4-24 16:44 编辑

求助各位大佬,下面是单链表--指定结点前插操作的代码,有两个问题就是
1.中间:s->data=e;合不合法,是否去掉不写也行?
2.各位大佬学数据结构的时候用的是啥编译器啊?咱跟王道书上敲得一摸一样,但CLion里面就是运行不了?感觉这代码既有c又有c++,(c里的指针,c++的引用符号&),现在都是手写{:1_923:} ,敲了也报错,各位大佬当初是用什么办法解决的呀?

//LNode *p:指指定的结点,ElemType e:指要插入的元素
bool InsertPriorNode(LNode *p,ElemType e){
    if(p==NULL){
      return false;
    }
    LNode *s=(LNode *)malloc(sizeof(LNode));
    if(s==NULL){
      return false;
    }
    s->data=e;
    s->next=p-next;
    p->next=s;

    s->data=p->data;
    p-data=e;
    return true;
}



withoutObject 发表于 2021-4-29 15:25

这段代码没有引用啊,我看着是只有C语言

EzGDNull 发表于 2021-4-30 23:38

本帖最后由 EzGDNull 于 2021-5-1 00:16 编辑

#define ElemType int
typedef struct LNode {

    ElemType   data;       //数据域

    struct LNode* next;   //指针域

}LNode, * LinkList;

bool InsertPriorNode(LNode* p, ElemType e) {
if (p == NULL) {
      return false;
    }
    int tempt;
    LNode* s = (LNode*)malloc(sizeof(LNode));
    if (s == NULL) {
      return false;
    }
    s->data = e;
    s->next = p->next;
    p->next = s;
    tempt = s->data;
    s->data = p->data;
    p->data = tempt;    return true;
}

int main(void)
{
   
    LNode* l1 = (LNode*)malloc(sizeof(LNode));
    l1->data = 1;
    l1->next = NULL;
    LNode* l2 = (LNode*)malloc(sizeof(LNode));
    l2->data = 3;
    l2->next = NULL;
    l1->next = l2;

    InsertPriorNode(l2, 2);

    while (l1)
    {
      printf("%d\n", l1->data);
      l1 = l1->next;
    }
    system("pause");    return 0;
}
在p的节点后插入一个节点,然后将p节点的值和插入节点的值交换,这就相当于在p节点前插入一个节点了,第一个问题:你的代码中这一句s->data=e;是必须的,后面的代码就有点不对了;
第二个问题,我上面代码是在vs2020中运行的,只要声明好结构体和数据类型,应该用什么编译器都可以。上面代码都是c语言,没有用到c++。
页: [1]
查看完整版本: 单链表--指定结点前插操作