思路:
一个s指针指向新建节点
一个节点指向尾节点
C++中有引用,写出来很简单,下面给出的是天勤数据结构高分笔记上面的写法(疯狂吐槽这种C和C++混用的方法)
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef struct LNode
{
int data;
struct LNode * next;
}LNode;
void createlistR(LNode *&C,int a[],int n)
{
LNode *s,*r;
int i;
C=(LNode*)malloc(sizeof(LNode));
C->next=NULL;
r=C;
for(i=0;i<n;i++)
{
s=(LNode*)malloc(sizeof(LNode));
s->data=a[i];
r->next=s;
r=r->next;
}
r->next=NULL;
}
int main()
{
int a[]={1,2,3,4,5,6,7,8,9,10};
LNode* head=(LNode*)malloc(sizeof(LNode));
createlistR(head,a,10);
LNode* p=head->next;
while(p)
{
cout<<p->data<<" ";
p=p->next;
}
return 0;
}
下面是C语言
C语言没有引用,指针变量的值传不回去
那
C语言的灵魂是什么?
呕~
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode
{
int data;
struct LNode * next;
}LNode;
void createlistR(LNode **C,int a[],int n)
{
LNode *s,*r;
int i;
(*C)=(LNode*)malloc(sizeof(LNode));
(*C)->next=NULL;
r= *(C);
for(i=0;i<n;i++)
{
s=(LNode*)malloc(sizeof(LNode));
s->data=a[i];
r->next=s;
r=r->next;
}
r->next=NULL;
}
int main()
{
int a[]={1,2,3,4,5,6,7,8,9,10};
LNode** head;
*head=(LNode*)malloc(sizeof(LNode));
createlistR(head,a,10);
LNode* p= (*head)->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
return 0;
}
上面的代码中严重问题,head没初始化,我能用。。。希望你也能用。。。
可能为了考研代码的易读性,才会出现这种奇奇怪怪的缝合怪吧?