一、翻转链表,输出链表
public ListNode
reverseList(ListNode head
) {
ListNode pre
= null
;
ListNode cur
= head
;
while (cur
!= null
){
ListNode next
= cur
.next
;
cur
.next
= pre
;
pre
= cur
;
cur
= next
;
}
return pre
;
}
二、翻转链表,输出数组 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
输入:head = [1,3,2] 输出:[2,3,1]
方法1:
先计算链表的长度,存放至数组中
public static int[] reverseList(ListNode head
) {
int length
= 0;
ListNode curNode
= head
;
while (curNode
!= null
){
length
++;
curNode
= curNode
.next
;
}
int[] res
= new int[length
];
for (int i
= res
.length
- 1; i
>= 0; i
--) {
res
[i
] = head
.val
;
head
= head
.next
;
}
return res
;
}
方法2
创建栈,将元素存放至栈中,先进后出存放至数组中
public int[] reversePrint(ListNode head
) {
Stack
<ListNode> stack
= new Stack<ListNode>();
while (head
!= null
){
stack
.push(head
);
head
= head
.next
;
}
int[] arr
= new int[stack
.size()];
for (int i
= 0; i
< arr
.length
; i
++) {
arr
[i
] = stack
.pop().val
;
}
return arr
;
}