012 反转链表
题目描述
输入一个链表,反转链表后,输出新链表的表头。
思路:需要定义3个指针,分别指向当前结点(head),当前结点的前一个结点(leftNode)和当前结点的后一个结点(rightNode)
// 牛客网通过
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
// 如果链表为空或长度为1, 则直接返回当前的头结点
if(head == null || head.next == null)
return head;
// 初始化两个指针
ListNode leftNode = null; // 指向当前结点的前一个结点
ListNode rightNode = null; // 指向当前结点的后一个结点
while(head != null) // head始终指向当前结点
{
// 1.反向链接起来(从右往左)
rightNode = head.next;
head.next = leftNode;
// 2.这3个临时指针同时往右移动一个位置(从左往右)
leftNode = head;
head = rightNode;
}
return leftNode;
}
}