设计一个算法,返回该结点的数据域

设计一个算法,通过一趟遍历,确定长度为n的单列表中值最小的节点,返回该节点的数据域。

int min(list l)
{
node *p = l->head;
int m = head->value;
while (1)
{
p = p->next;
if (!p) break;
if (m > p->value) m = p->value;
}
return m;
}

可以使用一个变量 min_value 来记录遍历过程中的最小值,并用一个指针 min_node 指向对应的节点。初始时,将 min_value 赋值为列表的第一个节点的数据域,并将 min_node 指向第一个节点。

然后从第二个节点开始,遍历整个单列表,每次检查当前节点的数据域是否比 min_value 小,如果是,则将 min_value 更新为该节点的数据域,并将 min_node 指向该节点。

最后遍历完整个列表后,min_node 就指向了值最小的节点,返回其数据域即可。

下面是算法的伪代码:

function findMinValue(head):
    // 初始化最小值和最小节点
    min_value = head.data
    min_node = head
    
    // 从第二个节点开始遍历
    curr = head.next
    while curr != null:
        // 如果当前节点的数据域比最小值小,则更新最小值和最小节点
        if curr.data < min_value:
            min_value = curr.data
            min_node = curr
        
        // 移动到下一个节点
        curr = curr.next
    
    // 返回最小节点的数据域
    return min_node.data