实现以下对单链表的操作,将单链表list逆转,将各结点的next指向其前驱。泛型方法,返回值类型前声明类型参数T。public static<T>void reverse(SinglyList<T>list)
时间: 2024-09-25 22:02:51 浏览: 41
在Java中,你可以通过创建一个新的辅助节点(通常称为临时变量或迭代器),遍历原链表并逐步调整节点的指针来实现链表的逆转。这里是一个泛型方法`reverse`的示例:
```java
import java.util.Iterator;
public class SinglyLinkedList<T> {
private Node<T> head;
// ...其他链表操作...
public static <T> void reverse(SinglyLinkedList<T> list) {
if (list == null || list.head == null) return; // 如果链表为空,直接返回
// 创建一个辅助头节点
Node<T> prev = new Node<>(null);
prev.next = list.head;
// 遍历链表,每次更新当前节点和前驱节点
Node<T> current = list.head;
while (current != null) {
Node<T> nextTemp = current.next; // 保存下一个节点
current.next = prev; // 将当前节点的next指向前一个节点
prev = current; // 更新前驱为当前节点
current = nextTemp; // 移动到下一个节点
}
// 设置新的头节点为原来的尾节点
list.head = prev;
}
// 省略Node<T>定义
static class Node<T> {
T data;
Node<T> next;
// 构造函数、getter和setter省略...
}
}
```
在这个方法里,我们首先检查链表是否为空,然后创建一个虚拟的前驱节点prev,并将其next设置为原始头节点。接着,我们用一个while循环遍历链表,每次迭代都会改变当前节点的next指向prev,同时更新prev和current。当遍历完链表后,head就指向了新的头节点。
阅读全文