链表002

  • 题目如下:

设计算法并实现, 通过一趟遍历确定单链表中值最大的结点。

  • 算法思想:
  • 链表的创建和linkList的声明看第一题链表001,此题比较简单,定义一个cur指针指向head头结点的下一个,然后遍历就行。
linkList* getMax(linkList* head)
{
    linkList* cur = head->next;
    linkList* maxNode = cur;
    int max = cur->data;
    while(cur != NULL)
    {
        if(max < cur->data)
        {
            max = cur->data;
            maxNode = cur;
        }
        cur = cur->next;
    }
    return maxNode;
}
### 关于链表去重算法实现 对于题目描述中的需求,可以采用哈希集合来追踪已经遇到的绝对值键值。遍原始链表时,如果当前节点的绝对值未曾在哈希集中出现,则将其加入到新的无重复项链表中;反之则将该节点添加至由被移除节点构成的新链表内[^1]。 为了高效处理并满足上述条件,在Python环境下可定义两个辅助函数用于创建新链表以及打印最终结果: ```python class ListNode: def __init__(self, value=0, next=None): self.value = value self.next = next def remove_duplicates(head): seen_abs_values = set() new_head = ListNode() # 新建一个哨兵节点作为不重复链表头指针前驱 removed_head = ListNode() # 同理新建哨兵节点存储所有被删除节点形成的链表 current_new = new_head current_removed = removed_head while head is not None: abs_val = abs(head.value) if abs_val not in seen_abs_values: seen_abs_values.add(abs_val) temp_node = ListNode(head.value) current_new.next = temp_node current_new = temp_node else: temp_node = ListNode(head.value) current_removed.next = temp_node current_removed = temp_node head = head.next return new_head.next, removed_head.next # 打印链表功能 def print_linked_list(node, label=""): elements = [] while node: elements.append(str(node.value)) node = node.next print(f"{label}: {'->'.join(elements)}" if elements else f"{label} Empty") ``` 此段代码实现了对带有整数键值的单向链表执行去重操作的功能,并分别构建了两条独立的链表——一个是经过筛选后不含任何重复绝对值元素的结果链表,另一个则是收集所有因违反唯一性原则而被淘汰下来的原链表成员所组成的列表[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值