用 c语言或 Java 语言,编程实现建立一个单链表,并在表中插入一个元素、删除一个元素
该回答引用chatgpt:
#include <stdio.h>
#include <stdlib.h>
//定义单链表结构体
typedef struct node{
int data;
struct node *next;
}Node, *List;
//建立单链表
List createList(int n){
List head, p, q;
int i;
head = (List)malloc(sizeof(Node)); //创建头结点
head->next = NULL;
p = head;
for (i = 0; i < n; i++){
q = (List)malloc(sizeof(Node)); //创建新节点
printf("请输入第%d个元素的值:", i + 1);
scanf("%d", &q->data); //读入节点的值
q->next = NULL;
p->next = q; //将新节点插入链表
p = q;
}
return head;
}
//插入元素
List insertNode(List head, int pos, int val){
List p, q;
int i;
p = head;
for (i = 1; i < pos && p != NULL; i++){
p = p->next;
}
if (p == NULL){
printf("插入位置非法!\n");
return head;
}
q = (List)malloc(sizeof(Node)); //创建新节点
q->data = val;
q->next = p->next; //将新节点插入链表
p->next = q;
return head;
}
//删除元素
List deleteNode(List head, int pos){
List p, q;
int i;
p = head;
for (i = 1; i < pos && p->next != NULL; i++){
p = p->next;
}
if (p->next == NULL){
printf("删除位置非法!\n");
return head;
}
q = p->next;
p->next = q->next; //将节点从链表中删除
free(q); //释放节点空间
return head;
}
//输出单链表
void printList(List head){
List p = head->next;
printf("单链表的元素为:");
while (p != NULL){
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
//主函数
int main(){
List head;
int n, pos, val;
printf("请输入单链表的长度:");
scanf("%d", &n);
head = createList(n);
printList(head);
printf("请输入要插入的元素位置和值:");
scanf("%d%d", &pos, &val);
head = insertNode(head, pos, val);
printList(head);
printf("请输入要删除的元素位置:");
scanf("%d", &pos);
head = deleteNode(head, pos);
printList(head);
return 0;
}
对于建立单链表,可以分为以下几个步骤:
typedef struct node {
int value;
struct node* next;
} Node;
Node* head = NULL;
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->value = 1;
new_node->next = head;
head = new_node;
Node* temp = head;
head = head->next;
free(temp);
至于是否需要对链表进行排序或者查找某个元素等操作,需要根据具体需求来实现。以下是一个完整的示例代码,包括建立链表、插入元素、删除元素和释放内存的操作:
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int value;
struct node* next;
} Node;
int main() {
Node* head = NULL;
// insert element at beginning
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->value = 1;
new_node->next = head;
head = new_node;
// insert element at beginning
new_node = (Node*)malloc(sizeof(Node));
new_node->value = 2;
new_node->next = head;
head = new_node;
// delete first element
Node* temp = head;
head = head->next;
free(temp);
// insert element at end
Node* curr_node = head;
while (curr_node->next != NULL) {
curr_node = curr_node->next;
}
new_node = (Node*)malloc(sizeof(Node));
new_node->value = 3;
new_node->next = NULL;
curr_node->next = new_node;
// print values of linked list
curr_node = head;
while (curr_node != NULL) {
printf("%d ", curr_node->value);
curr_node = curr_node->next;
}
// free memory
curr_node = head;
while (curr_node != NULL) {
temp = curr_node;
curr_node = curr_node->next;
free(temp);
}
return 0;
}
对于Java语言的单链表实现,可以使用Java已经提供的LinkedList类,具体方法参见Java官方文档。