linus建议的删除单链表指定节点的方法

本文介绍了一段使用C语言实现的链表操作示例,包括生成链表和删除奇数节点的功能。通过`rm_if`函数判断节点值是否为奇数,并使用递归方式构建链表,然后通过`del_odd`函数遍历并删除所有奇数节点。
#include<stdio.h>
#include<stdlib.h>

struct node {
    int i;
    struct node* next;
};

int rm_if(int i) {
    return i % 2;
}

void gen_list(struct node** head, int i) {
    if (i < 0)
        return;
    *head = (struct node*)malloc(sizeof(struct node));
    (*head)->i = i;
    (*head)->next = NULL;
    gen_list(&((*head)->next), i - 1);
}

void del_odd(struct node** head, int(*fn)(int)) {
    struct node** tmp;
    for (tmp = head; *tmp; ) {
        struct node* entry = *tmp;
        if (fn(entry->i)) {
            *tmp = entry->next;
            free(entry);
        } else
            tmp = &entry->next;
    }
} 

int main() {
    struct node** head, **tt;
    gen_list(head, 100);
    del_odd(head, rm_if);
    for (tt = head ; *tt;) {
        printf("%d ", (*tt)->i);
        tt = &((*tt)->next);
    }

    return 0;
}

### 如何在Linux命令行或脚本语言中执行删除操作 在Linux系统中,删除文件或目录是常见的操作。以下是几种方法和技巧来实现删除操作。 #### 使用`rm`命令删除文件 `rm`命令是Linux中最常用的删除命令之一。它可以用来删除文件或目录。需要注意的是,`rm`命令一旦执行,文件将被永久删除,无法通过回收站恢复[^1]。 - 删除单个文件: ```bash rm 文件名 ``` - 强制删除文件(无需确认): ```bash rm -f 文件名 ``` - 删除多个文件: ```bash rm 文件1 文件2 文件3 ``` - 删除目录中的所有`.txt`文件: ```bash rm *.txt ``` #### 使用`rm -r`命令删除目录 如果需要删除一个目录及其内容,可以使用`rm -r`命令。`-r`选项表示递归删除,即删除目录及其内部的所有文件和子目录[^2]。 - 删除空目录: ```bash rm -d 目录名 ``` - 删除非空目录及其内容: ```bash rm -rf 目录名 ``` #### 在Shell脚本中执行删除操作 在Shell脚本中,可以结合条件判断或其他逻辑来执行删除操作。以下是一个简单的示例脚本,用于删除指定路径下的所有`.log`文件: ```bash #!/bin/bash # 指定目标路径 TARGET_PATH="/path/to/directory" # 删除所有.log文件 find $TARGET_PATH -name "*.log" -type f -exec rm -f {} \; ``` 此脚本使用了`find`命令查找指定路径下的所有`.log`文件,并通过`rm`命令逐一删除[^2]。 #### 使用环境变量控制删除行为 在某些情况下,可以通过设置环境变量来影响删除操作的行为。例如,`HISTIGNORE`环境变量可以用来忽略某些命令的历史记录,避免敏感的删除操作被记录下来[^3]。 ```bash export HISTIGNORE="rm*" ``` 上述命令会忽略所有以`rm`开头的命令历史记录。 #### 注意事项 - 删除操作不可逆,请谨慎使用`rm`命令。 - 在编写Shell脚本时,建议添加适当的提示或确认逻辑,以防止误删重要文件。 - 对于批量删除操作,推荐先使用`ls`或`find`命令查看待删除的文件列表,确认无误后再执行删除
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值