用类Pascal语言写一个逆置单链表的算法
时间: 2023-05-19 19:04:25 浏览: 78
以下是用类Pascal语言写一个逆置单链表的算法的示例代码:
type
PNode = ^TNode;
TNode = record
Data: Integer;
Next: PNode;
end;
function ReverseList(Head: PNode): PNode;
var
Prev, Curr, Next: PNode;
begin
Prev := nil;
Curr := Head;
while Curr <> nil do
begin
Next := Curr^.Next;
Curr^.Next := Prev;
Prev := Curr;
Curr := Next;
end;
Result := Prev;
end;
在这个算法中,我们定义了一个指向单链表节点的指针类型PNode和一个包含数据和下一个节点指针的节点类型TNode。ReverseList函数接收一个指向单链表头节点的指针Head,并返回逆置后的单链表头节点指针。在函数中,我们使用三个指针Prev、Curr和Next来遍历单链表并逆置每个节点的Next指针。最后,我们返回逆置后的单链表头节点指针Prev。
相关问题
如何用类Pascal语言写出逆置单链表的数据元素的算法
以下是逆置单链表的数据元素的算法的类Pascal语言实现:
procedure ReverseList(var head: PNode);
var
p, q, r: PNode;
begin
if (head = nil) or (head^.next = nil) then
Exit;
p := head;
q := p^.next;
p^.next := nil;
while q <> nil do
begin
r := q^.next;
q^.next := p;
p := q;
q := r;
end;
head := p;
end;
用类Pascal语言写一个归并两升序循环链表的算法
以下是一个用类Pascal语言写的归并两升序循环链表的算法:
type
NodePtr = ^Node;
Node = record
data: Integer;
next: NodePtr;
end;
function MergeSortedCircularLists(list1, list2: NodePtr): NodePtr;
var
head, tail: NodePtr;
begin
if (list1 = nil) then
begin
MergeSortedCircularLists := list2;
Exit;
end
else if (list2 = nil) then
begin
MergeSortedCircularLists := list1;
Exit;
end;
if (list1^.data < list2^.data) then
begin
head := list1;
list1 := list1^.next;
end
else
begin
head := list2;
list2 := list2^.next;
end;
tail := head;
while (list1 <> nil) and (list2 <> nil) do
begin
if (list1^.data < list2^.data) then
begin
tail^.next := list1;
list1 := list1^.next;
end
else
begin
tail^.next := list2;
list2 := list2^.next;
end;
tail := tail^.next;
end;
if (list1 <> nil) then
tail^.next := list1
else
tail^.next := list2;
MergeSortedCircularLists := head;
end;
请注意,这个算法假设输入的两个链表都是升序的循环链表。