删除单链表中最大结点

 

class Node:
    def __init__(self, value, next=None):
        self.value = value
        self.next = next


class SinglyLinkedList:

    def __init__(self, data: list):
        length = len(data)
        p = Node(0, None)
        self.head = p
        for i in range(length):
            p.value = data[i]
            if i < length - 1:
                p = Node(0, Node)
                p.next = p

    def delete_max(self):
        max_item = 0

        p = self.head
        while p:
            if p.value > max_item:
                max_item = p.value

        p = self.head
        q = p
        while p:
            if p.value == max_item:
                q.next = p.next
                break

            q = p
            p = p.next


if __name__ == 'main':
    linkedList = SinglyLinkedList([1, 3, 2, 9, 0, 4, 7, 6, 5, 8])
    linkedList.delete_max()

大概是这样,没时间调试,你可以自己调试一下

#include <alloca.h>                                                                                                                                                                                                                          
#include <stdio.h>                                                                                                                                                                                                                           
                                                                                                                                                                                                                                             
struct list_elemt {                                                                                                                                                                                                                          
    int x;                                                                                                                                                                                                                                   
    struct list_elemt *next;                                                                                                                                                                                                                 
};                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                             
int main()                                                                                                                                                                                                                                   
{                                                                                                                                                                                                                                            
    struct list_elemt *head = NULL, *node, *max;                                                                                                                                                                                             
    int a[] = {1,3,2,9,0,4,7,6,5,8}, i;                                                                                                                                                                                                      
                                                                                                                                                                                                                                             
    for (i = sizeof(a)/sizeof(*a) - 1; i >= 0; i--) {                                                                                                                                                                                        
        node = alloca(sizeof(struct list_elemt));                                                                                                                                                                                            
        node->x = a[i];                                                                                                                                                                                                                      
        node->next = head;                                                                                                                                                                                                                   
        head = node;                                                                                                                                                                                                                         
    }                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                             
    for (node = head, max = node; node; node = node->next) {                                                                                                                                                                                 
        if (node->x > max->x)                                                                                                                                                                                                                
            max = node;                                                                                                                                                                                                                      
    }                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                             
    if (head == max)                                                                                                                                                                                                                         
        head = max->next;                                                                                                                                                                                                                    
    for (node = head; node && node->next; node = node->next) {                                                                                                                                                                               
        if (node->next->x == max->x)                                                                                                                                                                                                         
            node->next = node->next->next;                                                                                                                                                                                                   
    }                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                             
    printf("list : ");                                                                                                                                                                                                                       
    for (node = head; node; node = node->next) {                                                                                                                                                                                             
        printf("%d ", node->x);                                                                                                                                                                                                              
    }                                                                                                                                                                                                                                        
    printf("\nmax : %d\n", max->x);                                                                                                                                                                                                          
                                                                                                                                                                                                                                             
    return 0;                                                                                                                                                                                                                                
}