将单链表的链表顺序翻转过来,例如输入1->2->3->4->5,输出5->4->3->2->1
提供两种解题思路
第一种:迭代
第二种:递归
下面是源码:
/**
* 反转单链表
* 两个思路
*/
public class Reverse {
/**
* 单链表
*/
static class ListNode {
int val;
ListNode next;
public ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
/**
* 迭代
* @param head 头节点
* @return
*/
public static ListNode iterate(ListNode head) {
ListNode prev = null, next;//前面一个节点,初始为null。next:下一个节点
ListNode curr = head;//当前节点
while (curr != null) {
next = curr.next;
curr.next = prev;
prev = curr;
curr = next;
}
return prev;
}
/**
* 递归
* @param head 头节点
*/
public static ListNode recursion(ListNode head) {
if (head == null||head.next==null) {
return head;
}
ListNode new_head = recursion(head.next);//接受新的头指针
head.next.next = head;//当前节点下一节点的下一节点指针反转
head.next = null;//避免第一个节点下一节点指针还指着第二个节点
return new_head;
}
public static void main(String[] args) {
ListNode node5 = new ListNode(5, null);
ListNode node4 = new ListNode(4, node5);
ListNode node3 = new ListNode(3, node4);
ListNode node2 = new ListNode(2, node3);
ListNode node1 = new ListNode(1, node2);
// ListNode prev = iterate(node1);
ListNode prev = recursion(node1);
System.out.println(prev);
}
}
结果: