这是单链表的全部函数代码
/*链表的删除操作
* 删除链表中的相同元素,以单链表为例!*/
#include <iostream>
using namespace std;
typedef struct LNode {
int data;
struct LNode *next;
} LNode;//声明LNode结构体变量
void createList(LNode *&head, int arr[], int n) {
head = (LNode *) malloc(sizeof(LNode));
head->next = nullptr;
LNode *r = head;
for (int i = 0; i < n; i++) {
LNode *p = (LNode *) malloc(sizeof(LNode));
p->data = arr[i];
p->next = nullptr;
r->next = p;
}
}//建表操作,循环建立一个单链表
void printList(LNode *L) {
LNode *p;
p = L->next;
while (p != nullptr) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}//打印一个单链表
void del(LNode *L) {
LNode *p = L->next;
LNode *q;
while (p->next != nullptr) {
if (p->data == p->next->data) {
q = p->next;
p->next = q->next;
free(q);
} else
p = p->next;
}
}//操作函数,执行该之后链表中无相同元素
int main() {
int a[] = {1, 2, 3, 4, 7};
LNode *A;
createList(A, a, 5);
//del(A);
printList(A);
return 0;
}
细解分段主要模块
1.头部和链表声明
#include <iostream>
using namespace std;
typedef struct LNode {
int data;
struct LNode *next;
} LNode;//声明LNode结构体变量
2.单链表创建
void createList(LNode *&head, int arr[], int n) {
head = (LNode *) malloc(sizeof(LNode));
head->next = nullptr;
LNode *r = head;
for (int i = 0; i < n; i++) {
LNode *p = (LNode *) malloc(sizeof(LNode));
p->data = arr[i];
p->next = nullptr;
r->next = p;
}
}//建表操作,循环建立一个单链表
3.链表输出
void printList(LNode *L) {
LNode *p;
p = L->next;
while (p != nullptr) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}//打印上述创建好的单链表
4.主函数
int main() {
int a[] = {1, 2, 3, 4, 7};
LNode *A;
createList(A, a, 5);
//del(A);
printList(A);
return 0;
}
注释:del函数在主函数内部被暂时注释掉了,因为仅创建并和打印之后,链表输出就有问题,执行完成之后,控制台如下显示:
只打印了最后一个数值
不知道哪位大佬帮忙看一下,初学数据结构,不太懂。。。
。。。敲代码的时候,createList函数的最后一行 r = p 忘记敲了,我竟然还没发现。。。
更新之后的createList函数应该如下:
void createList(LNode *&head, int arr[], int n) {
head = (LNode *) malloc(sizeof(LNode));
head->next = nullptr;
LNode *r = head;
for (int i = 0; i < n; i++) {
LNode *p = (LNode *) malloc(sizeof(LNode));
p->data = arr[i];
p->next = nullptr;
r->next = p;
r = p;//更新r指针的位置
}
}//建表操作,循环建立一个单链表
r指针必须更新到p指针,将这块空间保留,因为p指针会变化,但是r指针如果不保留p的值,r 指针也是只有一个头结点的单个空间。