【问题标题】:How reverse singly linked list in Pascal?Pascal中如何反向单链表?
【发布时间】:2023-08-04 21:21:01
【问题描述】:
program uka3;
type
    itemptr = ^item;
    item = record
        data: integer;
        next: itemptr;
    end;

var
    first, tmp: itemptr;
    n: integer;
begin
    first := nil;
    while not SeekEof do { Reading numbers }
    begin
        read(n);
        new(tmp);
        tmp^.data := n;
        tmp^.next := first;
        first := tmp;
    end;

{ here i need loop that reverse number in right order } 

    tmp := first;
    while tmp <> nil do { Output reversed numbers }
    begin
        writeln(tmp^.data);
        tmp := tmp^.next;
    end;

    while first <> nil do { Free memory }
    begin
        tmp := first^.next;
        dispose(first);
        first := tmp;
    end;
end.

这个程序读取数字并以相反的顺序输出它们。

我如何在读取这些数字后循环反转这些数字,以便它们按照写入的顺序排列?

【问题讨论】:

  • 您可以将显示的数字存储到另一个堆栈中,然后显示该堆栈的内容 - 它们将以实际上是原始顺序的相反顺序再次出现。

标签: list pascal singly-linked-list freepascal


【解决方案1】:

下面是一个反转列表的过程。只需使用 ReverseList(first) 调用它。

procedure ReverseList(var list: itemptr);
    var curr, prev, next: itemptr;
begin
    prev := nil;
    curr := list;
    while curr <> nil do
    begin
        next := curr^.next;
        curr^.next := prev;
        prev := curr;
        curr := next
    end;
    list := prev
end

【讨论】:

  • 兄弟我有单链表)我用另一个堆栈反转它
  • @17sean ReverseList 需要一个单链表。这是反转单链表最有效的方法。