删除单链表(带头结点,头插入法建立单链表)的第i个结点,代码
时间: 2024-05-05 08:17:23 浏览: 12
以下是删除单链表的第i个结点的代码实现。其中,head为头结点指针,i为待删除结点的位置。
```c++
void deleteNode(ListNode* head, int i) {
ListNode* p = head->next;
ListNode* pre = head;
int j = 1;
while (p && j < i) {
pre = p;
p = p->next;
j++;
}
if (!p || j > i) {
cout << "删除位置无效" << endl;
return;
}
pre->next = p->next;
delete p;
}
```
思路解析:
从头结点的下一个节点开始循环查找,记录当前节点位置和前一个节点位置,直到找到待删除节点或者遍历完整个链表。
如果找到待删除节点,将前一个节点的next指向待删除节点的next,然后删除待删除节点。
如果没有找到待删除节点,说明删除位置无效,直接输出提示信息即可。
相关问题
删除单链表(带头结点,头插入法建立单链表)的第i个结点
如果单链表是带头结点的,则第i个结点的前一个结点是第i-1个结点。
具体步骤如下:
1. 首先判断链表是否为空或者i是否小于等于0,如果是则直接返回。
2. 遍历链表,找到第i-1个结点,同时判断是否越界,如果越界则返回。
3. 用一个指针指向第i-1个结点的下一个结点,即第i个结点。
4. 将第i-1个结点的next指针指向第i+1个结点,即跳过第i个结点。
5. 释放第i个结点的内存空间。
代码实现如下:
```python
def delete_node(head, i):
if not head or i <= 0:
return
# 遍历链表,找到第i-1个结点
p = head
for j in range(i-1):
p = p.next
if not p:
return
# p指向第i-1个结点,q指向第i个结点
q = p.next
if not q:
return
# 跳过第i个结点
p.next = q.next
# 释放第i个结点的内存空间
del q
```
c语言删除单链表(带头结点,头插入法建立单链表)的第i个结点
以下是删除单链表第i个结点的C语言代码,其中假设单链表的头结点为head:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} Node;
// 头插入法建立单链表
Node* createList(int n) {
Node* head = (Node*)malloc(sizeof(Node));
head->next = NULL;
for (int i = 0; i < n; i++) {
Node* newNode = (Node*)malloc(sizeof(Node));
printf("请输入第%d个结点的值:", i + 1);
scanf("%d", &(newNode->data));
newNode->next = head->next;
head->next = newNode;
}
return head;
}
// 删除第i个结点
void deleteNode(Node* head, int i) {
Node* p = head;
int j = 0;
while (p && j < i - 1) {
p = p->next;
j++;
}
if (!p || !p->next) return; // 第i个结点不存在
Node* delNode = p->next;
p->next = delNode->next;
free(delNode);
}
// 打印单链表
void printList(Node* head) {
Node* p = head->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
int n, i;
printf("请输入单链表的长度:");
scanf("%d", &n);
Node* head = createList(n);
printf("请输入要删除的结点位置:");
scanf("%d", &i);
deleteNode(head, i);
printf("删除后的单链表为:");
printList(head);
return 0;
}
```
代码解释:
1. `createList()`函数使用头插入法建立单链表,返回头结点指针。
2. `deleteNode()`函数接受一个头结点指针和一个整数i,表示要删除第i个结点。首先遍历单链表找到第i-1个结点,然后将其next指针指向第i+1个结点,最后释放第i个结点的内存空间。
3. `printList()`函数用于打印单链表,从头结点的next开始遍历输出每个结点的值。
4. `main()`函数中读入单链表的长度和要删除的结点位置,然后调用`createList()`函数建立单链表,调用`deleteNode()`函数删除第i个结点,最后调用`printList()`函数打印删除后的单链表。