java组数从头尾插入
时间: 2023-05-12 17:06:05 浏览: 42
元素的时间复杂度分别是多少?
Java 数组从头部插入元素的时间复杂度是 O(n),因为需要将数组中的所有元素向后移动一位。从尾部插入元素的时间复杂度是 O(1),因为只需要将元素插入到数组的末尾即可。
相关问题
单链表的头尾插入和删除C语言
单链表的头尾插入和删除C语言代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 头插法插入节点
void insertAtHead(Node** headRef, int newData) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = newData;
newNode->next = *headRef;
*headRef = newNode;
}
// 尾插法插入节点
void insertAtTail(Node** headRef, int newData) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = newData;
newNode->next = NULL;
if (*headRef == NULL) {
*headRef = newNode;
return;
}
Node* lastNode = *headRef;
while (lastNode->next != NULL) {
lastNode = lastNode->next;
}
lastNode->next = newNode;
}
// 头删除节点
void deleteAtHead(Node** headRef) {
if (*headRef == NULL) {
return;
}
Node* tempNode = *headRef;
*headRef = tempNode->next;
free(tempNode);
}
// 尾删除节点
void deleteAtTail(Node** headRef) {
if (*headRef == NULL) {
return;
}
Node* lastNode = *headRef;
Node* prevNode = NULL;
while (lastNode->next != NULL) {
prevNode = lastNode;
lastNode = lastNode->next;
}
if (prevNode == NULL) {
*headRef = NULL;
} else {
prevNode->next = NULL;
}
free(lastNode);
}
// 打印链表
void printList(Node* head) {
Node* tempNode = head;
while (tempNode != NULL) {
printf("%d ", tempNode->data);
tempNode = tempNode->next;
}
printf("\n");
}
int main() {
Node* head = NULL;
// 头插法插入节点
insertAtHead(&head, 1);
insertAtHead(&head, 2);
insertAtHead(&head, 3);
printf("After head insert: ");
printList(head);
// 头删除节点
deleteAtHead(&head);
printf("After head delete: ");
printList(head);
// 尾插法插入节点
insertAtTail(&head, 4);
insertAtTail(&head, 5);
insertAtTail(&head, 6);
printf("After tail insert: ");
printList(head);
// 尾删除节点
deleteAtTail(&head);
printf("After tail delete: ");
printList(head);
return 0;
}
```
有头尾节点的双向链表如何插入
在有头尾节点的双向链表中插入一个新节点,需要考虑以下几种情况:
1. 如果链表为空,直接将新节点作为头节点和尾节点。
2. 如果插入位置是头节点前面,将新节点作为新的头节点,并将原头节点作为它的后继节点。
3. 如果插入位置是尾节点后面,将新节点作为新的尾节点,并将原尾节点作为它的前驱节点。
4. 如果插入位置是中间节点,需要将新节点插入到目标节点的前面。具体步骤为:
4.1 将新节点的前驱节点指向目标节点的前驱节点。
4.2 将新节点的后继节点指向目标节点。
4.3 将目标节点的前驱节点的后继节点指向新节点。
4.4 将目标节点的前驱节点更新为新节点。
需要注意的是,在插入节点时,需要考虑边界条件,如链表为空或者插入位置是头节点或尾节点。同时,为了避免遍历链表查找插入位置,我们可以在链表中维护一个指向尾部节点的指针,这样可以快速插入新节点。