• 一、题目
  • 二、解题思路
  • 三、解题代码

    一、题目

    定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。

    二、解题思路

    ①遍历。将指向下一个节点的指针指向上一个节点。

    ②递归。先让指向下一个节点的指针为空,然后递归调用,最后再将指向下一个节点的指针指向上一个节点。

    三、解题代码

    遍历

    1. /**
    2. * 反转单链表
    3. * @param head
    4. * @return
    5. */
    6. private static Node reverseHead(Node head) {
    7. if (head == null) {
    8. return head;
    9. }
    10. Node pre = head;
    11. Node cur = head.nextNode;
    12. Node next = null;
    13. while(cur != null){
    14. next = cur.nextNode;
    15. cur.nextNode = pre;
    16. pre = cur;
    17. cur = next;
    18. }
    19. head.nextNode = null;
    20. head = pre;
    21. return head;
    22. }

    递归

    1. /**
    2. * 递归反转
    3. * @param head
    4. * @return
    5. */
    6. private static Node reverseByRecur(Node current) {
    7. if (current == null || current.nextNode == null) return current;
    8. Node nextNode = current.nextNode;
    9. current.nextNode = null;
    10. Node reverseRest = reverseByRecur(nextNode);
    11. nextNode.nextNode = current;
    12. return reverseRest;
    13. }