java 手写反转单向链表_java实现单链表反转

一、简介

经查阅,主要有两种方法实现链表反转,递归反转法和遍历反转法;

递归: 在反转当前结点之前先反转其后边的结点,即、从尾结点开始逆向反转各个节点的指针域指向;

遍历:从前往后反转各个结点的指针域的指向。

二、实现

定义一个结点类:

public class Node {

private int data;  //数据域

private Node next;    //指针域

public Node(int data) {

super();

this.data = data;

}

public int getData() {

return data;

}

public void setData(int data) {

this.data = data;

}

public Node getNext() {

return next;

}

public void setNext(Node next) {

this.next = next;

}

}

递归反转:

public static Node reverse(Node head){

//如果是空链表或者尾结点

if (head==null||head.getNext()==null) {

return head;

}

//先反转后续结点

Node reversedHead=reverse(head.getNext());

//当前结点指针指向前一结点

head.getNext().setNext(head);

//令前一结点的指针域为null

head.setNext(null);

return reversedHead;

}

遍历反转:

public static Node reverse1(Node head){

if (head==null) {

return head;

}

//上一结点

Node pre=head;

//当前结点

Node cur=head.getNext();

//用于存储下一节点

Node tem;

//cur==null 即尾结点

while(cur!=null){

//下一节点存入临时结点

tem=cur.getNext();

//将当前结点指针指向上一节点

cur.setNext(pre);

//移动指针

pre=cur;

cur=tem;

}

head.setNext(null);

return pre;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值