题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
实例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
解题思路:(下面,我们把传过来的链表简称为head。)
1、首先判断是不是空链表,如果是空链表,那么直接返回null。
2、如果head长度只有1,那么我们直接使用一个ListNode对象直接接收完返回即可。
3、如果head长度大于等于2,那么用两个ListNode对象,一个(lastNode)逐个遍历传过来的链表(从第二个值开始),然后保存他此时遍历到的值,一个(reverse)保存他上一个值(也就是从第一个开始)。然后让lastNode的next指向reverse,再把reverse指向lastNode,经过一番遍历之后,整个链表都反转过来了。
直接看代码:
/**
* 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(head == null){
return null;
}
ListNode reverse = new ListNode(head.val);
ListNode lastNode;
while (head.next != null){
lastNode = new ListNode(head.next.val);
lastNode.next = reverse;
reverse = lastNode;
head = head.next;
}
return reverse;
}
}
力扣战绩:
这是我第二天做算法题,也是我第一次拿到这么好的成绩,感动,记录一下。