Skip to content

Instantly share code, notes, and snippets.

@4lex1v
Created November 30, 2012 21:13
Show Gist options
  • Save 4lex1v/4178665 to your computer and use it in GitHub Desktop.
Save 4lex1v/4178665 to your computer and use it in GitHub Desktop.
LL for Costya
unit LinkedList;
interface
type
node =^ elem;
elem = record
entry : string;
count : integer;
next : node;
end;
llist = node;
procedure put(var list: llist; val: string);
function get(var list: llist; index: integer): string;
function remove(var list: llist; index: integer): string;
procedure change(var list: llist; index: integer; val: string);
procedure print(var list: llist);
implementation
procedure print(var list: llist);
begin
if list^.next <> nil then
print(list^.next);
writeln(list^.entry);
end;
procedure put(var list: llist; val: string);
var
q, p: llist;
counter: integer;
begin
new(q);
q^.entry := val;
q^.count := 0;
q^.next := nil;
if list = nil then
list := q
else
begin
p := list;
counter := 0;
while p^.next <> nil do begin
counter := counter + 1;
p := p^.next;
end;
q^.count := counter;
p^.next := q;
end;
end;
function get(var list: llist; index: integer): string;
var
res, p: llist;
begin
if list = nil then
get := 'The List is Empty'
else
begin
p := list;
res := nil;
while p^.next <> nil do begin
if p^.count = index then
res := p;
p := p^.next;
end;
if res = nil then
get := 'Not Fount'
else
get := res^.entry;
end;
end;
function remove(var list: llist; index: integer): string;
var
res, p, prev: llist;
begin
if list = nil then
remove := 'The List is Empty'
else
begin
p := list;
res := nil;
prev := nil;
while p^.next <> nil do begin
prev := p;
if (p^.count + 1) = index then
res := p^.next;
p := p^.next;
end;
if res = nil then
remove := 'Value Not Found'
else
begin
prev^.next := res^.next;
remove := res^.entry;
end;
end;
end;
procedure change(var list: llist; index: integer; val: string);
var
res, p: llist;
begin
if list <> nil then begin
p := list;
res := nil;
while p^.next <> nil do begin
if p^.count = index then
res := p;
p := p^.next;
end;
res^.entry := val;
end;
end;
end.
program main;
uses LinkedList;
var
list: llist;
l1, l2, tmp: string;
size, line1, line2, after: integer;
infile, output: text;
begin
assign(infile, 'input.txt');
reset(infile);
size := 0;
repeat
readln(infile, tmp);
size := size + 1;
put(list, tmp);
until Eof(infile);
close(infile);
write('Enter the line num for transfer: ');
readln(line1);
while line1 > size do begin
write('Sorry, but you have only ', size, ' lines, enter another number: ');
readln(line1);
end;
write('Enter into which line uo want to paste: ');
readln(line2);
while line2 > size do begin
write('Sorry, but you have only ', size, ' lines, enter another number: ');
readln(line2);
end;
write('After which symbol: ');
readln(after);
l1 := remove(list, line1);
writeln('Line ', l1, '(',line1, ') removed');
l2 := get(list, line2);
writeln('Pasting into ', l2, '(', line2, ')');
tmp := copy(l2, 0, after);
tmp := tmp + l1;
tmp := tmp + copy(l2, after + 1, length(l2) - after);
change(list, line2, tmp);
writeln('Line changed');
assign(outfile, 'out.txt');
rewrite(outfile);
print(list);
close(outfile);
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment