单链表节点
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
方案一 迭代
/**
* 迭代法
* 先保存当前结点的下一个节点
* 将当前结点指向我们定义的上一个结点
* 然后把当前节点赋给上一个节点
* 同时把保存的下一个节点赋给当前节点
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre=null;
ListNode cur=head;
while(cur!=null){
ListNode tempNode = cur.next;//先保存当前结点的下一个节点
cur.next = pre;//将当前结点指向我们定义的上一个结点
pre = cur; //把上一个节点指向当前节点
cur = tempNode;//把保存的下一个节点指向当前节点
}
return pre;
}
}
流程图
方案二 递归
private Node reverseRecursion(Node head) {
if(head==null||head.next ==null) {
return head;
}
Node prev = reverseRecursion(head.next);
head.next.next = head;//指向上一个节点
head.next = null;//讲当前节点next域赋值为null
return prev;
}
流程图