Java带头节点的单链表逆置
时间: 2024-10-23 15:01:27 浏览: 22
在Java中,带头节点的单链表逆置通常通过迭代或递归的方式实现。这里是一个简单的迭代方法:
```java
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode current = head;
while (current != null) {
// 保存当前节点的下一个节点
ListNode nextTemp = current.next;
// 将当前节点的next指向前一个节点
current.next = prev;
// 移动prev和current到下一位
prev = current;
current = nextTemp;
}
// 返回新的头节点,即原链表的尾节点
return prev;
}
```
这个算法的工作原理是每次循环都将当前节点的`next`指向`prev`,然后将`prev`和`current`向后移动一位,直到遍历完整个链表。最后返回`prev`作为新的头节点。
相关问题
1、实现不带头结点单链表逆置算法,逆置后头指针在最后一个结点,并返回 头指针 typedef struct node {DataType data;struct Node *next;}Node; Node* ReverseList(Node *head)
在C语言中,你可以通过迭代或递归的方式来实现一个不带头结点的单链表逆置。这里是一个基于迭代的解决方案:
```c
Node* ReverseList(Node* head) {
Node *prev = NULL, *current = head, *nextTemp = NULL;
// 遍历链表,每次将当前节点的下一个节点指向 prev
while (current != NULL) {
nextTemp = current->next;
current->next = prev;
prev = current;
current = nextTemp;
}
// 更新新的头节点为原头节点的下一个(即原头节点变成了最后一个)
if (prev != NULL) {
head = prev;
}
return head;
}
```
这个函数的工作原理是,它首先创建两个指针 `prev` 和 `current`,初始时 `prev` 置为 `NULL`,`current` 置为头节点。然后在循环中,每次都将 `current` 的 `next` 指向 `prev`,并将 `current` 和 `prev` 向前移动一位,直到遍历完整个链表。最后,如果原始头节点还有下一个节点(因为头节点未被修改),则更新新的头节点为 `prev`。
1、实现不带头结点单链表逆置算法,逆置后头指针在最后一个结点,并返回头指针 typedef struct node {DataType data;struct Node *next;}Node; Node* ReverseList(Node *head)
实现单链表逆置的一种常见方法是使用迭代的方式。首先创建两个指针,一个指向当前节点,另一个称为prev,初始值为NULL。然后,遍历链表,对于每个节点,将其next指向前一个节点,然后将当前节点和prev都向后移动一位。当遍历完整个链表后,原头节点现在就是新的尾节点,所以我们可以返回它作为新的头指针。
以下是用C语言描述的算法步骤:
1. 初始化两个指针current(当前节点)和prev(前一个节点),并将它们都设置为head。
2. 当current不为空时,执行以下操作:
a. 记录当前节点的下一个节点temp,即将temp设为current->next。
b. 更新当前节点的next指针,使其指向prev(即逆转链接)。
c. prev向前移动一步,指向temp。
d. current向前移动一步,指向下一个节点(如果有的话)。
3. 遍历结束后,prev就是新链表的头,返回prev。
下面是伪代码形式的函数实现:
```cpp
Node* ReverseList(Node* head) {
Node* current = head;
Node* prev = NULL;
Node* temp;
while (current != NULL) {
temp = current->next; // 保存当前节点的下一个节点
current->next = prev; // 将当前节点的next指向前一个节点
prev = current; // prev前进一位
current = temp; // current前进一位
}
return prev; // 返回新的头节点
}
```
阅读全文