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;
}