Tôi đã làm việc trên một dự án Java cho một lớp học trong một thời gian. Nó là một triển khai của một danh sách liên kết (ở đây được gọi là AddressList
, chứa các nút đơn giản được gọi ListNode
). Điểm bắt buộc là mọi thứ sẽ phải được thực hiện với các thuật toán đệ quy. Tôi đã có thể làm mọi thứ tốt đẹp không có một phương pháp:public AddressList reverse()
ListNode:
public class ListNode{
public String data;
public ListNode next;
}
Ngay bây giờ reverse
hàm của tôi chỉ gọi một hàm trợ giúp nhận một đối số để cho phép đệ quy.
public AddressList reverse(){
return new AddressList(this.reverse(this.head));
}
Với chức năng trợ giúp của tôi có chữ ký của private ListNode reverse(ListNode current)
.
Hiện tại, tôi thấy nó hoạt động lặp đi lặp lại bằng cách sử dụng một ngăn xếp, nhưng đây không phải là những gì đặc tả yêu cầu. Tôi đã tìm thấy một thuật toán trong C đảo ngược đệ quy và chuyển đổi nó sang mã Java bằng tay, và nó hoạt động, nhưng tôi không hiểu gì về nó.
Chỉnh sửa: Đừng bận tâm, tôi đã tìm ra nó trong khi chờ đợi.
private AddressList reverse(ListNode current, AddressList reversedList){
if(current == null)
return reversedList;
reversedList.addToFront(current.getData());
return this.reverse(current.getNext(), reversedList);
}
Trong khi tôi ở đây, có ai thấy có vấn đề gì với tuyến đường này không?