题目描述:输入一个链表,反转链表后,输出链表的所有元素。
/**
* 翻转链表
*
* @author 过路的守望
*
*/
public class ReverseList {
/*
* 非递归链表翻转
*/
public ListNode reverseList(ListNode head) {
/*
* 如果链表为空或则只含有链表头,直接返回
*/
if (head == null || head.next == null) {
return head;
}
/*
* 用一个pre记录当前节点的前一个节点
*/
ListNode pre = null;
/*
* temp记录当前节点的下一个节点
*/
ListNode temp = null;
while (head != null) {
temp = head.next;
head.next = pre;
pre = head;
head = temp;
}
return pre;
}
/*
* 递归实现
*/
public ListNode reverseListRec(ListNode head){
/*
* 如果当前节点为空或则无下一节点,直接返回
*/
if(head == null||head.next == null){
return head;
}
ListNode reverse = reverseListRec(head.next);
/*
* 翻转
*/
head.next.next = head;
/*
* 避免成环
*/
head.next = null;
return reverse;
}
public static class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
}