反转链表
一种解决方案是按原始顺序迭代结点,并将它们逐个移动到列表的头部。
算法过程说明:
-
1.请记住,黑色结点 23 是原始的头结点
-
- 首先,我们将黑色结点的下一个结点(即结点 6)移动到列表的头部:
- 首先,我们将黑色结点的下一个结点(即结点 6)移动到列表的头部:
-
- 然后,我们将黑色结点的下一个结点(即结点 15)移动到列表的头部:
- 然后,我们将黑色结点的下一个结点(即结点 15)移动到列表的头部:
-
- 黑色结点的下一个结点现在是空。因此,我们停止这一过程并返回新的头结点 15。
代码实现
算法的过程很简单,翻译为代码的话,我们需要做的步骤如下:
- 定义一个新的链表,表示反转后的链表,即定义一个新节点
- 需要明确原链表的head节点不能变化,因为我们需要通过原head结点来移动
- head节点的next不为空的话,说明我们还要继续遍历
- 使用一个临时变量temp将head的next节点保存,head的next重新指向为temp的next,temp的next指向新的链表。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
if(null == head){
return null;
}
ListNode newHead = head;
while(null != head.next){
ListNode temp = head.next;
head.next = temp.next;
temp.next = newHead;
newHead = temp;
}
return newHead;
}
}
算法好废脑子呀😟