单向链表反转

Posted 小施主

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单向链表反转相关的知识,希望对你有一定的参考价值。

单向链表反转

先创建一个单向链表

/**
 * 单向链表 * * */class Node{
    public Node(int value){
        this.value = value;
 }
    public int value;
 public Node next;
}
  • 头插法

头插法使用双指针方式进行头插

/**
 * 方式1 * @param head
 * @return
 */
public  static Node reverse1(Node head){
    /**
 * 判断当前节点是否为空或者仅有一个节点 
 */ 
 if (head == null || head.next == null) {
        return head;
 }
 //记录上一个cur的节点
 Node pre = null;
 //记录当前节点的下一个节点
 Node post;
 while (head!=null){
 //把post节点前移
 post = head.next;
 //当前节点的下一个节点指向上一次的当前节点
 head.next = pre;
 //把当前节点赋值给pre,用于下次使用
 pre = head;
 //把当前节点前移
 head = post;
 }
    //由于最后循环中 head = post已经做了前移,所以此处取pre为反转后的链表
 return pre;
}
  • 递归反转

/**
 * 方式2,递归 * @param head
 * @return
 */
public  static Node reverse2(Node head){
 /**
 * 判断当前节点是否为空或者仅有一个节点 
 */ 
 if (head == null || head.next == null) {
        return head;
 }
 /**
 * 递归方式获取下一个节点,最底层返回的node为链表的尾部 
 */
 Node node = reverse2(head.next);
 /**
 * 此处进行反转
 */ 
 head.next.next = head;
 head.next = null;
 return node;
}

以上是关于单向链表反转的主要内容,如果未能解决你的问题,请参考以下文章

链表的java实现(单向双向链表,单向链表的反转)

算法总结之 反转单向和双向链表

单向链表反转

[算法]反转单向链表和双向链表

5定义一个JS函数,反转单向链表

79 - 反转单向链表