5分钟学会反转链表
今天我们来看一看反转链表的解决;
方法:(三步走)
1.构造一个单链表;
2.巧用3个指针,prev(指向当前节点前面的节点),nows(指向当前结点),band(指向当前结点的后一·个结点);
3.函数实现,将当前结点保存,prev保存当前节点,band保存当前节点后一个节点,将当前节点指向prve,当前节点向后移动,重复动作。最后band指向当前结点,返回band(其位反转链表的头结点了)
具体代码实现;
1.构造一个单链表;
//定义一个单链表
class ListNode{
public String var;
public ListNode next;
public ListNode( String var) {
this.var = var;
}
public ListNode() {
}
public ListNode Create(){
ListNode a = new ListNode("a");
ListNode b= new ListNode("b");
ListNode c= new ListNode("c");
ListNode d= new ListNode("d");
ListNode e= new ListNode("e");
ListNode f= new ListNode("f");
ListNode g= new ListNode("g");
a.next = b;
b.next = c;
c.next = d;
d.next = e;
e.next= f;
f.next = g;
return a;
}
@Override
public String toString() {
return "ListNode{" +
"var='" + var + '\'' +
", next=" + next +
'}';
}
}
2.巧用3个指针,prev(指向当前节点前面的节点),nows(指向当前结点),band(指向当前结点的后一·个结点);
3.函数实现,将当前结点保存,prev保存当前节点,band保存当前节点后一个节点,将当前节点指向prve,当前节点向后移动,重复动作。最后band指向当前结点,返回band(其位反转链表的头结点了)
public class Demo {
public static void main(String[] args) {
ListNode sb = new ListNode();
Demo demo = new Demo();
System.out.println(demo.Changer(sb.Create()).toString());
}
//反转链表的函数实现;
public ListNode Changer(ListNode node){
ListNode band = null;
ListNode nows = node;
ListNode prev = null;
while (nows!=null){
ListNode next = nows.next;
if(next == null)
band = nows;
nows.next = prev ;
prev = nows;
nows = next;
}
return band;
}
}