/** * 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 || head.next == null){ return head; }else { //添加一个用来辅助反转的节点 ListNode reverseHead = null; //当前节点 ListNode currentNode = head; //当前节点的前一个节点 ListNode previousNode = null; while(currentNode != null){ //当前节点的后一个节点 ListNode nextNode = currentNode.next; if(nextNode == null){ reverseHead = currentNode; } //将当前节点的后一个节点指向当前节点的前一个节点 currentNode.next = previousNode; //将当前节点的前一个节点指向当前节点 previousNode = currentNode; //将当前节点指向当前节点的后一个节点 currentNode = nextNode; } return reverseHead; } } }
解题思路:
我们要明白返回的是当前节点,所以先用来指定一个结点用来指向后面一个接结点为空的当前节点
通过添加一个额外的结点来实现链表的反转,让当前节点的下一个结点指向当前结点的前一个节点,再让当前节点的前一个节点指向当前节点,最后让当前节点指向当前节点的下一个结点