输入一个链表,反转链表后,输出新链表的表头。
思路:需要定义3个指针,分别指向当前遍历到的节点、它的前一个节点及后一个节点。
测试用例:
(1)输入的链表头指针是null
(2)输入的链表只有一个节点
(3)输入的链表有多个节点
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode ReverseList(ListNode head) { if(head == null || head.next == null) return head; ListNode newHead = null; ListNode curNode = head, prevNode = null; while(curNode != null){ ListNode nextNode = curNode.next; if(nextNode == null) newHead = curNode; curNode.next = prevNode; prevNode = curNode; curNode = nextNode; } return newHead; } }
递归解法实现反转链表:
public ListNode ReverseList(ListNode head) { if(head == null || head.next == null) return head; //先反转后面的链表,走到链表的末端结点 ListNode pReverseNode = ReverseList(head.next); //再将当前节点设置为后面节点的后续节点 head.next.next = head; head.next = null; return pReverseNode; }
原文:https://www.cnblogs.com/Aug-20/p/11817118.html