重学数据结构(四)——实现单链表的反转
单链表反转
思路:
单链表反转:就是把每个节点的指针域由原来的指向下一个节点变为指向其前一个节点。 思路: 1.因为单链表没有指向前一个节点的指针域,所以这里需要创建一个指向前一个节点的指针pre,用于存储每一个节点的前一个节点。 2.需要定义一个保存当前节点的指针cur,以及下一个节点的next。 3.先创建cur(当前节点),pre(前一个节点)指针后,遍历单链表,将当前节点的指针域指向前一个节点,之后将定义的pre和cur指针往后移动,直至遍历到最后一个节点停止。
Node类的实现
package com.codezs.datastruct.mylinkedlist;
public class Node<T> {
T data;
Node<T> next;
Node(Node<T> next) {
this.next = next;
}
public Node(T data, Node<T> next) {
this.data = data;
this.next = next;
}
public T getData(){
return data;
}
public Node<T> getNext(){
return next;
}
public void setNext(Node<T> next){this.next = next;}
}
package com.codezs.datastruct.mylinkedlist;
public class LinkListReverse {
//实现单链表的反转
public static Node reverse(Node node){
//当前节点
Node cur = node;
//前一个节点
Node pre = null;
while (cur != null){
//取出当前节点的下一个节点
Node next = cur.next;
//当前节点的next指向前一个节点
cur.next = pre;
//前一个节点向后移动
pre = cur;
//当前节点向后移动
cur = next;
}
return pre;
}
}