有一个单链表l(至少有1个结点),其头结点指针为head,\n\n编写一个过程将l逆置,即最后一个结点变成第一个结点,\n\n原来倒数第二个结点变成第二个结点,如此等等。java
时间: 2024-11-09 22:30:06 浏览: 23
在Java中,可以使用迭代或者递归的方式反转单链表。这里我会提供一种常见的迭代方法:
```java
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public void reverseList(ListNode head) {
// 创建两个指针,一个指向当前节点,另一个指向前一个节点
ListNode prev = null, curr = head;
// 当前节点不为空时,循环遍历整个链表
while (curr != null) {
// 将当前节点的next指向前一个节点
ListNode temp = curr.next;
curr.next = prev; // 更新当前节点的next
// 移动指针到下一个节点
prev = curr;
curr = temp;
}
// 链表反转完成,返回新的头节点prev
head = prev;
}
```
在这个过程中,我们通过不断交换`curr.next`和`prev`的值,使得每次循环后`curr`都会向后移动一位,并且`prev`会成为`curr`的下一个节点。当`curr`变为`null`时,说明已经遍历到了链表的末尾,此时`prev`就是新链表的头节点。
相关问题
有一个单链表l(至少有1个结点),其头结点指针为head,\n\n编写一个过程将l逆置,即最后一个结点变成第一个结点,\n\n原来倒数第二个结点变成第二个结点,如此等等。
此题是一道关于单向链表的问题,要求将链表的头结点变为尾结点,同时将倒数第二个结点变为最后一个结点。这个操作可以通过遍历链表到达链表尾部,记录下链表长度,再利用长度找到倒数第二个结点和尾结点,分别将它们的指针指向对应的位置即可。
有一个单链表(不同结点的数据域值可能相同),其头指针为head,编写一个函数计算数据域为x的结点个数。
可以编写一个函数,遍历整个单链表,统计数据域为x的结点个数。具体实现如下:
int countNode(Node* head, int x) {
int count = 0;
Node* p = head;
while (p != NULL) {
if (p->data == x) {
count++;
}
p = p->next;
}
return count;
}
其中,head是单链表的头指针,x是要查找的数据域值。count是计数器,初始值为0。p是遍历指针,初始值为head。在循环中,如果p指向的结点的数据域值等于x,则计数器加1。最后返回计数器的值,即为数据域为x的结点个数。
阅读全文