关于创建链表的有关问题
关于创建链表的问题
两个程序传递方式不同,指针的指针,指针,整的头大,谁可以帮忙理下思路,这两个程序,
第一个,我创建一个LinkNode指针, 我把指针的地址传递过去,然后就行内存分配,,,
第二个,我创建了一个LinkNode指针的指针,而把这个指针的指针,传递过去,进行后继操作会报错的。为什么呢?
------解决方案--------------------
你没有理解指针的概念,建议你单步跟一下看看。
第二个程序。
createLink(L);//这样写, 会存在错误,</span>
L==NULL,
createLink函数中,你想取L==NLL指向的类型,那肯定会错误的。
------解决方案--------------------
void createLink(LinkList* L)
这个只能改变L所指向的内存的内容,无法改变L本身的值
你要改成void createLink(LinkList*& L)
------解决方案--------------------
可不可以解释这段代码 <span style="color: #FF0000;">LinkList *L=NULL;
------解决方案--------------------
二级指针为NULL,当然不能给一级指针分配内存了
------解决方案--------------------
仅供参考
#include<iostream>
using namespace std;
typedef struct LinkNode{
int data;
struct LinkNode *next;
}LinkNode,*LinkList;
void createLink(LinkList* L)
{
*L = new LinkNode;
(*L)->next=NULL;
LinkNode *node =NULL;
node = *L;
int m;
while (cin>>m)
{
LinkNode *newdoe = new LinkNode;
newdoe->data = m;
newdoe->next = NULL;
node->next=newdoe;
node=newdoe;
}
}
int main()
{
LinkList L=NULL;
createLink(&L); //我这样写, 通过传递地址实现,
return 0;
}
#include<iostream>
using namespace std;
typedef struct LinkNode{
int data;
struct LinkNode *next;
}LinkNode,*LinkList;
void createLink(LinkList* L)
{
*L = new LinkNode;
(*L)->next=NULL;
LinkNode *node =NULL;
node = *L;
int m;
while (cin>>m)
{
LinkNode *newdoe = new LinkNode;
newdoe->data = m;
newdoe->next = NULL;
node->next=newdoe;
node=newdoe;
}
}
int main()
{
LinkList *L=NULL;
createLink(L);//这样写, 会存在错误,
return 0;
}
两个程序传递方式不同,指针的指针,指针,整的头大,谁可以帮忙理下思路,这两个程序,
第一个,我创建一个LinkNode指针, 我把指针的地址传递过去,然后就行内存分配,,,
第二个,我创建了一个LinkNode指针的指针,而把这个指针的指针,传递过去,进行后继操作会报错的。为什么呢?
------解决方案--------------------
你没有理解指针的概念,建议你单步跟一下看看。
第二个程序。
createLink(L);//这样写, 会存在错误,</span>
L==NULL,
createLink函数中,你想取L==NLL指向的类型,那肯定会错误的。
------解决方案--------------------
void createLink(LinkList* L)
这个只能改变L所指向的内存的内容,无法改变L本身的值
你要改成void createLink(LinkList*& L)
------解决方案--------------------
可不可以解释这段代码 <span style="color: #FF0000;">LinkList *L=NULL;
------解决方案--------------------
二级指针为NULL,当然不能给一级指针分配内存了
------解决方案--------------------
仅供参考
//假设带表头结点的单向链表头指针为head,试编写一个算法将值为5的结点插入到连接表的第k个结点前,删除第k个节点,并对该链表进行排序。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>
struct NODE {
int data;
struct NODE *next;
} H,*head,*p,*q,*s1,*s2,*s3,*s4,*s;
int i,j,k,n,t,m;
int main() {
srand(time(NULL));
//填写头节点数据
H.data=-1;
H.next=NULL;
head=&H;
//创建10个节点的单链表
p=head;
for (i=0;i<10;i++) {
q=(struct NODE *)malloc(sizeof(struct NODE));
if (NULL==q) return 1;
q->data=rand()%100;//填写0..99的随机值
q->next=NULL;
p->next=q;
p=q;
}
//输出整个单链表
s=head->next;
while (1) {
if (NULL==s) {
printf("\n");
break;
}
printf("%02d->",s->data);
s=s->next;
}
//将值为5的结点插入到单链表的第k个结点前
k=3;
n=0;
p=head;
while (1) {
if (NULL==p) {
break;
}
n++;
if (k==n) {
q=(struct NODE *)malloc(sizeof(struct NODE));
if (NULL==q) return 1;
q->data=5;
q->next=p->next;
p->next=q;
break;
}
p=p->next;
}