王道数据结构2.2.7——13、两个递增单链表合并为一个递减单链表

思路

设立指针ra,rb分别指向A和B,当两个指针都不为空时,用头插法将两指针中较小者放入C中;当两个指针中有一个为空时,头插法放入另一个指针的元素。直到把A和B的元素都放完。

代码

void merge(LinkList A,Linklist B,LinkList &C){
    C=(LinkList)malloc(sizeof(LNode));
    C->next=NULL;
    LNode *ra=A->next,*rb=B->next,*r;
    while(ra!=NULL || rb!=NULL){
        if(rb==NULL || ra->data < rb->data){
            r=ra->next;
            ra->next=C->next;
            C->next=ra; ra=r;
        }else if(ra==NULL || ra->data > rb->data){
            r=rb->next;
            rb->next=C->next;
            C->next=rb; rb=r;
        }
    }
}

 

<think>我们正在使用EasyExcel向指定Sheet写入数据。根据引用[1]和引用[3],我们可以通过创建ExcelWriter对象,然后为每个Sheet构建WriteSheet对象并指定其名称或索引来实现。 核心步骤: 1. 创建ExcelWriter对象,指定输出文件路径和模型类(如果需要表头)。 2. 构建WriteSheet对象,指定sheet的名称或索引(从0开始)。 3. 调用ExcelWriter的write方法,传入数据列表和WriteSheet对象。 4. 关闭ExcelWriter(使用try-with-resources自动关闭)。 注意:如果我们要写入的Sheet已经存在,则覆盖;如果不存在,则创建。 示例代码: 假设我们有两个不同的数据模型类:Employee(员工)和Department(部门),我们要将员工数据写入名为“员工信息”的Sheet,将部门数据写入名为“部门统计”的Sheet。 具体实现如下:</think>使用 EasyExcel 向 Excel 文件的**指定 Sheet** 写入数据的步骤如下,结合引用[1]和引用[3]的实现方案: ### 核心代码实现 ```java // 1. 初始化ExcelWriter(指定文件路径) try (ExcelWriter excelWriter = EasyExcel.write("output.xlsx").build()) { // 2. 创建指定Sheet的配置对象(两种方式) // 方式1:通过sheet名称指定(推荐) WriteSheet sheet = EasyExcel.writerSheet("销售数据") // 指定Sheet名称 .head(SalesData.class) // 绑定数据模型类 .build(); // 方式2:通过sheet索引指定(索引从0开始) // WriteSheet sheet = EasyExcel.writerSheet(2).build(); // 指定第三个Sheet // 3. 写入数据到指定Sheet List<SalesData> dataList = getSalesData(); // 获取业务数据 excelWriter.write(dataList, sheet); // 关键写入操作 } // 4. 自动关闭资源(try-with-resources) ``` ### 关键参数说明 | **参数/方法** | **说明** | **示例** | |----------------------|-------------------------------------------------------------------------|----------------------------------| | `writerSheet()` | 指定目标Sheet | `.writerSheet("Q3报表")` | | `.head(Class)` | 绑定带`@ExcelProperty`注解的模型类 | `.head(Employee.class)` | | `.needHead(Boolean)` | 控制是否输出表头(默认true) | `.needHead(false)` | | `.sheetNo()` | 设置Sheet索引(覆盖名称指定) | `.sheetNo(1)` | | `excelWriter.write()` | 执行写入操作 | `excelWriter.write(data, sheet)` | ### 完整业务场景示例 ```java public void exportToSpecificSheet() { String outputPath = "/reports/2023Q3_sales.xlsx"; // 模型类(使用@ExcelProperty定义列) public class SalesData { @ExcelProperty("区域") private String region; @ExcelProperty(value = "销售额", converter = MoneyConverter.class) private BigDecimal amount; } try (ExcelWriter writer = EasyExcel.write(outputPath).build()) { // 构建目标Sheet配置(索引1=第二个Sheet) WriteSheet targetSheet = EasyExcel.writerSheet(1, "华东区销售") // 指定索引和名称 .head(SalesData.class) .registerConverter(new MoneyConverter()) // 注册金额格式化转换器 .build(); // 写入业务数据 List<SalesData> eastChinaData = salesService.getRegionalData("east_china"); writer.write(eastChinaData, targetSheet); } } ``` ### 注意事项 1. **Sheet存在性处理**: - 若指定名称的Sheet**不存在**:自动创建新Sheet - 若指定名称的Sheet**已存在**:覆盖原有内容(不会删除其他Sheet)[^1] 2. **索引与名称优先级**: - 同时指定索引和名称时,**索引优先级更高**(如`.writerSheet(2, "备用")`实际操作第三个Sheet)[^3] 3. **依赖版本控制**: ```xml <!-- 确保使用正确版本(引用[2][3]) --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.7</version> </dependency> ``` 4. **模板集成**: ```java // 引用[1]模板方案:基于现有模板写入 ExcelWriter writer = EasyExcel.write(templatePath, SalesData.class).build(); WriteSheet sheet = EasyExcel.writerSheet("模板页").build(); ``` > 提示:通过`ExcelWriter`的`write`方法多次调用,可向**同一文件的不同Sheet**写入数据,每个Sheet需独立配置[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值