链表逆序
反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 方法一: 用三指针法解决此题定义结点f和s分别指向第一个结点和第二个结点,定义虚拟结点dummyHead,让它的next指向第一个结点,具体步骤如下图: 代码实现如下: public static Node reverseList(Node head) { // 定义虚拟头结点 Node dummyHead = new Node(-1 ); dummyHead.next = head; if (head == null || head.next == null ) { return head; } else { // 定义f,s分别指向第一个结点和第二个结点 Node f = dummyHead.next; Node s = f.next; while (s != null ) { f.next = s.next; s.next = dummyHead.next; dummyHead.next = s; s = f.next; } return dummyHead.next; } } 方法二:递归 递归版本稍微复杂一些,其关键在于反向工作。假设列表的其余部分已经被反转,现在我该如何反转它前面的部分?假设列表为:n1 → … → nk-1 → nk → nk+1