问题: 反转一个链表
1. 迭代的方法
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
//将当前节点next改成前一个节点
public class Solution {
public ListNode reverseList(ListNode head) {
ListNode curr = head;//标记当前节点
ListNode newNext = null;//新的下一个节点
ListNode newPrev;//新的上一个节点
while (curr != null){
newPrev = curr.next;
curr.next = newNext;
newNext = curr;
curr = newPrev;
}
return newNext;
}
}
2. 递归的方法:
将链表分成3个部分
R: 反转链表的头部
H:当前处理链表
Hprime:没有反转的链表头部
每次调用时将H.next=R,处理Hprime.
public class Solution {
public ListNode reverseList(ListNode head) {
ListNode R = null;
return reverse(head, R);
}
private ListNode reverse(ListNode H, ListNode R){
if (H == null) return R;
ListNode Hprime = H.next;
H.next = R;
R = H;
return reverse(Hprime, R);
}
}