经常刷题会遇到逆序链表问题,解决方法是:
用一个头节点实现反转,具体逻辑看代码。
public class Solution {
public class ListNode{
int value;
ListNode next = null;
public ListNode(int value) {
this.value = value;
}
}
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
//构建以head开头的链表,但是真正的逆序链表是head。next开始
ListNode head = new ListNode(-1);
while(listNode != null && listNode.next != null) {
ListNode help = listNode.next;
listNode.next = help.next;
help.next = listNode;
listNode = help;
}
ArrayList<Integer> ret = new ArrayList<>();
listNode = head.next;
while(listNode != null){
ret.add(listNode.value);
listNode = listNode.next;
}
return ret;
}
}