#include <iostream>
#include <string>
using namespace std;
struct Sterminarz
{
Sterminarz *next = NULL;
int year;
int month;
int day;
int hour;
string note;
bool operator<(const Sterminarz &rhs) const {
if (year < rhs.year) return true;
if (year > rhs.year) return false;
if (month < rhs.month) return true;
if (month > rhs.month) return false;
if (day < rhs.day) return true;
if (day > rhs.day) return false;
return (hour < rhs.hour);
/* alternatively:
return std::tie(year, month, day, hour) < std::tie(rhs.year, rhs.month, rhs.day, rhs.hour);
*/
}
};
Sterminarz* add(Sterminarz* &head, int year, int month, int day, int hour, string note)
{
Sterminarz **p = &head;
while (*p)
p = &((*p)->next);
*p = new Sterminarz;
(*p)->year = year;
(*p)->month = month;
(*p)->day = day;
(*p)->hour = hour;
(*p)->note = note;
return *p;
}
Sterminarz* findEarliest(Sterminarz *head, Sterminarz** beforeEarliest)
{
if (beforeEarliest)
*beforeEarliest = NULL;
if (!head)
return NULL;
Sterminarz *p, *previous = head, *earliest = head;
int counter = 0;
for(p = head->next; p; p = p->next)
{
if (*p < *earliest)
{
earliest = p;
if (beforeEarliest) *beforeEarliest = previous;
counter++;
//printNote(earliest, counter);
}
previous = p;
}
return earliest;
}
void printList(Sterminarz *head)
{
while (head) {
cout << head->note << " ";
head = head->next;
}
}
void clearList(Sterminarz* &head)
{
while (head) {
Sterminarz *next = head->next;
delete head;
head = next;
}
}
int main()
{
Sterminarz *head = NULL;
Sterminarz *p = add(head, 2020, 5, 29, 12, "1");
p = add(p, 2020, 5, 29, 6, "2");
add(p, 2020, 1, 1, 10, "3");
cout << "before: ";
printList(head);
cout << endl;
Sterminarz *beforeEarliest;
Sterminarz *earliest = findEarliest(head, &beforeEarliest);
if (earliest != head)
{
beforeEarliest->next = earliest->next;
earliest->next = head;
head = earliest;
}
cout << "after: ";
printList(head);
cout << endl;
clearList(head);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IFN0ZXJtaW5hcnoKewogICAgU3Rlcm1pbmFyeiAqbmV4dCA9IE5VTEw7CiAgICBpbnQgeWVhcjsKICAgIGludCBtb250aDsKICAgIGludCBkYXk7CiAgICBpbnQgaG91cjsKICAgIHN0cmluZyBub3RlOwoKCWJvb2wgb3BlcmF0b3I8KGNvbnN0IFN0ZXJtaW5hcnogJnJocykgY29uc3QgewoJCWlmICh5ZWFyIDwgcmhzLnllYXIpIHJldHVybiB0cnVlOwoJCWlmICh5ZWFyID4gcmhzLnllYXIpIHJldHVybiBmYWxzZTsKCgkJaWYgKG1vbnRoIDwgcmhzLm1vbnRoKSByZXR1cm4gdHJ1ZTsKCQlpZiAobW9udGggPiByaHMubW9udGgpIHJldHVybiBmYWxzZTsKCgkJaWYgKGRheSA8IHJocy5kYXkpIHJldHVybiB0cnVlOwoJCWlmIChkYXkgPiByaHMuZGF5KSByZXR1cm4gZmFsc2U7CgoJCXJldHVybiAoaG91ciA8IHJocy5ob3VyKTsKCgkJLyogYWx0ZXJuYXRpdmVseToKCQlyZXR1cm4gc3RkOjp0aWUoeWVhciwgbW9udGgsIGRheSwgaG91cikgPCBzdGQ6OnRpZShyaHMueWVhciwgcmhzLm1vbnRoLCByaHMuZGF5LCByaHMuaG91cik7CgkJKi8KCX0KfTsKClN0ZXJtaW5hcnoqIGFkZChTdGVybWluYXJ6KiAmaGVhZCwgaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSwgaW50IGhvdXIsIHN0cmluZyBub3RlKQp7CglTdGVybWluYXJ6ICoqcCA9ICZoZWFkOwoJd2hpbGUgKCpwKQoJCXAgPSAmKCgqcCktPm5leHQpOwoKICAgICpwID0gbmV3IFN0ZXJtaW5hcno7CiAgICAoKnApLT55ZWFyID0geWVhcjsKICAgICgqcCktPm1vbnRoID0gbW9udGg7CiAgICAoKnApLT5kYXkgPSBkYXk7CiAgICAoKnApLT5ob3VyID0gaG91cjsKICAgICgqcCktPm5vdGUgPSBub3RlOwogICAgCiAgICByZXR1cm4gKnA7Cn0KClN0ZXJtaW5hcnoqIGZpbmRFYXJsaWVzdChTdGVybWluYXJ6ICpoZWFkLCBTdGVybWluYXJ6KiogYmVmb3JlRWFybGllc3QpCnsKICAgIGlmIChiZWZvcmVFYXJsaWVzdCkKICAgICAgICAqYmVmb3JlRWFybGllc3QgPSBOVUxMOwoKICAgIGlmICghaGVhZCkKICAgICAgICByZXR1cm4gTlVMTDsKCiAgICBTdGVybWluYXJ6ICpwLCAqcHJldmlvdXMgPSBoZWFkLCAqZWFybGllc3QgPSBoZWFkOwogICAgaW50IGNvdW50ZXIgPSAwOwoKICAgIGZvcihwID0gaGVhZC0+bmV4dDsgcDsgcCA9IHAtPm5leHQpCiAgICB7CgkJaWYgKCpwIDwgKmVhcmxpZXN0KQogICAgICAgIHsKICAgICAgICAgICAgZWFybGllc3QgPSBwOwogICAgICAgICAgICBpZiAoYmVmb3JlRWFybGllc3QpICpiZWZvcmVFYXJsaWVzdCA9IHByZXZpb3VzOwogICAgICAgICAgICBjb3VudGVyKys7ICAKICAgICAgICAgICAgLy9wcmludE5vdGUoZWFybGllc3QsIGNvdW50ZXIpOwogICAgICAgIH0gICAgICAgICAgIAogICAgICAgIHByZXZpb3VzID0gcDsKICAgIH0KCiAgICByZXR1cm4gZWFybGllc3Q7Cn0KCnZvaWQgcHJpbnRMaXN0KFN0ZXJtaW5hcnogKmhlYWQpCnsKCXdoaWxlIChoZWFkKSB7CgkJY291dCA8PCBoZWFkLT5ub3RlIDw8ICIgIjsKCQloZWFkID0gaGVhZC0+bmV4dDsKCX0KfQoKdm9pZCBjbGVhckxpc3QoU3Rlcm1pbmFyeiogJmhlYWQpCnsKCXdoaWxlIChoZWFkKSB7CgkJU3Rlcm1pbmFyeiAqbmV4dCA9IGhlYWQtPm5leHQ7CgkJZGVsZXRlIGhlYWQ7CgkJaGVhZCA9IG5leHQ7Cgl9Cn0KCmludCBtYWluKCkKewoJU3Rlcm1pbmFyeiAqaGVhZCA9IE5VTEw7CglTdGVybWluYXJ6ICpwID0gYWRkKGhlYWQsIDIwMjAsIDUsIDI5LCAxMiwgIjEiKTsKCXAgPSBhZGQocCwgMjAyMCwgNSwgMjksIDYsICIyIik7CglhZGQocCwgMjAyMCwgMSwgMSwgMTAsICIzIik7CgoJY291dCA8PCAiYmVmb3JlOiAiOwoJcHJpbnRMaXN0KGhlYWQpOwoJY291dCA8PCBlbmRsOwoJCglTdGVybWluYXJ6ICpiZWZvcmVFYXJsaWVzdDsKCVN0ZXJtaW5hcnogKmVhcmxpZXN0ID0gZmluZEVhcmxpZXN0KGhlYWQsICZiZWZvcmVFYXJsaWVzdCk7CglpZiAoZWFybGllc3QgIT0gaGVhZCkKCXsKCSAgICBiZWZvcmVFYXJsaWVzdC0+bmV4dCA9IGVhcmxpZXN0LT5uZXh0OwoJICAgIGVhcmxpZXN0LT5uZXh0ID0gaGVhZDsKCSAgICBoZWFkID0gZWFybGllc3Q7Cgl9CgoJY291dCA8PCAiYWZ0ZXI6ICI7CglwcmludExpc3QoaGVhZCk7Cgljb3V0IDw8IGVuZGw7CgoJY2xlYXJMaXN0KGhlYWQpOwoKCXJldHVybiAwOwp9