链表反转
链表的结构:
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
反转函数:
class Solution {
// 定义ListNode类,通常是这样的:
// public class ListNode {
// int val;
// ListNode next;
// ListNode(int x) { val = x; }
// }
// reverseList方法用于反转一个链表
public ListNode reverseList(ListNode head) {
// pre用于保存当前节点的前一个节点
ListNode pre = null;
// next用于保存当前节点的下一个节点
ListNode next = null;
// 遍历链表,直到到达链表的末尾(head为null)
while (head != null) {
// 保存当前节点的下一个节点,因为在反转过程中会改变当前节点的next指针
next = head.next;
// 将当前节点的next指针指向前一个节点,完成当前节点的反转
head.next = pre;
// 移动pre指针到当前节点,更新前一个节点为当前节点
pre = head;
// 移动head指针到下一个节点,即原链表中的下一个节点
head = next;
}
// 当链表遍历完成后,pre指针指向原链表的最后一个节点,即新链表的第一个节点
return pre;
}
}
具体步骤
Step1:
Step2:
Step3…
重复上述步骤直至head=null