program ideone;
{$MODE OBJFPC}{$LONGSTRINGS ON}
type
PNode = ^TNode;
TNode = record
Data: UInt8;
Next: PNode;
end;
function CreateList(ASize: Integer; AData: array of UInt8): PNode;
var
LHead, LNode: PNode;
LIndex: UInt8 = 0;
begin
New(LHead);
LHead^.Data := AData[LIndex];
LHead^.Next := nil;
Result := LHead;
Inc(LIndex);
while LIndex < ASize do
begin
New(LNode);
LNode^.Data := AData[LIndex];
LNode^.Next := nil;
LHead^.Next := LNode;
LHead := LNode;
Inc(LIndex);
end;
end;
function MergeLists(ALeft, ARight: PNode): PNode;
var
LLast: PNode;
begin
if ALeft = nil then Exit(ARight);
if ARight = nil then Exit(ALeft);
if ALeft^.Data < ARight^.Data then
begin
LLast := ALeft;
ALeft := ALeft^.Next;
end
else
begin
LLast := ARight;
ARight := ARight^.Next;
end;
Result := LLast;
while (ALeft <> nil) and (ARight <> nil) do
begin
if ALeft^.Data < ARight^.Data then
begin
LLast^.Next := ALeft;
ALeft := ALeft^.Next;
end
else
begin
LLast^.Next := ARight;
ARight := ARight^.Next;
end;
LLast := LLast^.Next;
end;
if ALeft <> nil then
LLast^.Next := ALeft
else
LLast^.Next := ARight;
end;
procedure ShowList(AHead: PNode);
begin
while AHead <> nil do
begin
Write(AHead^.Data:3);
AHead := AHead^.Next;
end;
WriteLn();
end;
var
LLeft, LRight, LMerged: PNode;
begin
Randomize();
LLeft := CreateList(5, [0, 4, 5, 6, 11]);
LRight := CreateList(9, [1, 2, 3, 5, 7, 8, 9, 10, 12]);
ShowList(LLeft);
ShowList(LRight);
WriteLn();
LMerged := MergeLists(LLeft, LRight);
ShowList(LMerged);
end.
cHJvZ3JhbSBpZGVvbmU7Cgp7JE1PREUgT0JKRlBDfXskTE9OR1NUUklOR1MgT059Cgp0eXBlCiAgUE5vZGUgPSBeVE5vZGU7CiAgVE5vZGUgPSByZWNvcmQKICAgIERhdGE6IFVJbnQ4OwogICAgTmV4dDogUE5vZGU7CiAgZW5kOwoKICBmdW5jdGlvbiBDcmVhdGVMaXN0KEFTaXplOiBJbnRlZ2VyOyBBRGF0YTogYXJyYXkgb2YgVUludDgpOiBQTm9kZTsKICB2YXIKICAgIExIZWFkLCBMTm9kZTogUE5vZGU7CiAgICBMSW5kZXg6IFVJbnQ4ID0gMDsKICBiZWdpbgogICAgTmV3KExIZWFkKTsKICAgIExIZWFkXi5EYXRhIDo9IEFEYXRhW0xJbmRleF07CiAgICBMSGVhZF4uTmV4dCA6PSBuaWw7CgogICAgUmVzdWx0IDo9IExIZWFkOwogICAgSW5jKExJbmRleCk7CgogICAgd2hpbGUgTEluZGV4IDwgQVNpemUgZG8KICAgIGJlZ2luCiAgICAgIE5ldyhMTm9kZSk7CiAgICAgIExOb2RlXi5EYXRhIDo9IEFEYXRhW0xJbmRleF07CiAgICAgIExOb2RlXi5OZXh0IDo9IG5pbDsKCiAgICAgIExIZWFkXi5OZXh0IDo9IExOb2RlOwogICAgICBMSGVhZCA6PSBMTm9kZTsKCiAgICAgIEluYyhMSW5kZXgpOwogICAgZW5kOwogIGVuZDsKCiAgZnVuY3Rpb24gTWVyZ2VMaXN0cyhBTGVmdCwgQVJpZ2h0OiBQTm9kZSk6IFBOb2RlOwogIHZhcgogICAgTExhc3Q6IFBOb2RlOwogIGJlZ2luCiAgICBpZiBBTGVmdCAgPSBuaWwgdGhlbiBFeGl0KEFSaWdodCk7CiAgICBpZiBBUmlnaHQgPSBuaWwgdGhlbiBFeGl0KEFMZWZ0KTsKCiAgICBpZiBBTGVmdF4uRGF0YSA8IEFSaWdodF4uRGF0YSB0aGVuCiAgICBiZWdpbgogICAgICBMTGFzdCA6PSBBTGVmdDsKICAgICAgQUxlZnQgOj0gQUxlZnReLk5leHQ7CiAgICBlbmQKICAgIGVsc2UKICAgIGJlZ2luCiAgICAgIExMYXN0IDo9IEFSaWdodDsKICAgICAgQVJpZ2h0IDo9IEFSaWdodF4uTmV4dDsKICAgIGVuZDsKCiAgICBSZXN1bHQgOj0gTExhc3Q7CgogICAgd2hpbGUgKEFMZWZ0IDw+IG5pbCkgYW5kIChBUmlnaHQgPD4gbmlsKSBkbwogICAgYmVnaW4KICAgICAgaWYgQUxlZnReLkRhdGEgPCBBUmlnaHReLkRhdGEgdGhlbgogICAgICBiZWdpbgogICAgICAgIExMYXN0Xi5OZXh0IDo9IEFMZWZ0OwogICAgICAgIEFMZWZ0IDo9IEFMZWZ0Xi5OZXh0OwogICAgICBlbmQKICAgICAgZWxzZQogICAgICBiZWdpbgogICAgICAgIExMYXN0Xi5OZXh0IDo9IEFSaWdodDsKICAgICAgICBBUmlnaHQgOj0gQVJpZ2h0Xi5OZXh0OwogICAgICBlbmQ7CgogICAgICBMTGFzdCA6PSBMTGFzdF4uTmV4dDsKICAgIGVuZDsKCiAgICBpZiBBTGVmdCA8PiBuaWwgdGhlbgogICAgICBMTGFzdF4uTmV4dCA6PSBBTGVmdAogICAgZWxzZQogICAgICBMTGFzdF4uTmV4dCA6PSBBUmlnaHQ7CiAgZW5kOwoKICBwcm9jZWR1cmUgU2hvd0xpc3QoQUhlYWQ6IFBOb2RlKTsKICBiZWdpbgogICAgd2hpbGUgQUhlYWQgPD4gbmlsIGRvCiAgICBiZWdpbgogICAgICBXcml0ZShBSGVhZF4uRGF0YTozKTsKICAgICAgQUhlYWQgOj0gQUhlYWReLk5leHQ7CiAgICBlbmQ7CgogICAgV3JpdGVMbigpOwogIGVuZDsKCnZhcgogIExMZWZ0LCBMUmlnaHQsIExNZXJnZWQ6IFBOb2RlOwpiZWdpbgogIFJhbmRvbWl6ZSgpOwoKICBMTGVmdCAgOj0gQ3JlYXRlTGlzdCg1LCBbMCwgNCwgNSwgNiwgMTFdKTsKICBMUmlnaHQgOj0gQ3JlYXRlTGlzdCg5LCBbMSwgMiwgMywgNSwgNywgOCwgOSwgMTAsIDEyXSk7CgogIFNob3dMaXN0KExMZWZ0KTsKICBTaG93TGlzdChMUmlnaHQpOwoKICBXcml0ZUxuKCk7CgogIExNZXJnZWQgOj0gTWVyZ2VMaXN0cyhMTGVmdCwgTFJpZ2h0KTsKICBTaG93TGlzdChMTWVyZ2VkKTsKZW5kLgo=