You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Erlang递归实现:移除列表倒数第二个元素并追加指定元素

Erlang递归实现列表操作:移除倒数第二个元素并追加指定元素

针对你需要实现的remove_penultimate/1函数,咱们可以用递归遍历列表的方式搞定,不用计算列表长度就能定位并移除倒数第二个元素。核心想法就是在递归过程中识别出列表的最后两个元素,此时跳过倒数第二个,只保留最后一个;对于前面的元素,则正常递归保留。

完整实现代码

-module(task).

-export([remove_and_add/1]).

remove_and_add(List) ->
    % 先移除倒数第二个元素,再追加第2和第5个元素
    remove_penultimate(List) ++ [nth(2, List)] ++ [nth(5, List)].

% 递归获取第N个元素
nth(1, [H|_]) ->
    H;
nth(N, [_|T]) when N > 1 ->
    nth(N - 1, T).

% 移除倒数第二个元素的递归实现
% 空列表直接返回
remove_penultimate([]) ->
    [];
% 单个元素没有倒数第二个,直接返回原列表
remove_penultimate([X]) ->
    [X];
% 只剩两个元素时,跳过倒数第二个,返回最后一个
remove_penultimate([_Penultimate, Last]) ->
    [Last];
% 递归处理:保留当前头元素,继续处理剩余列表
remove_penultimate([H | T]) ->
    [H | remove_penultimate(T)].

逻辑说明

  • remove_penultimate/1递归逻辑
    • 如果列表是空的或者只有一个元素,直接返回原列表(没东西可删)
    • 要是列表刚好两个元素,就只返回最后一个(把倒数第二个删掉)
    • 更长的列表就把当前第一个元素留着,递归处理剩下的部分,最后拼起来就行
  • nth/2的小优化
    • 加了when N > 1的判断,避免N是0或者负数的时候无限递归

测试示例

% 测试用例:原列表[1,2,3,4,5,6]
% 移除倒数第二个元素5后得到[1,2,3,4,6],再追加第2个元素2和第5个元素5,最终结果是[1,2,3,4,6,2,5]
1> task:remove_and_add([1,2,3,4,5,6]).
[1,2,3,4,6,2,5]

内容的提问来源于stack exchange,提问作者Ted Mosby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 10:15:34