反转链表 16

总结

   

定义三个类似指针的引用,一个指向当前节点,一个指向前一个节点,初始化为null,一个指向后一个节点

   

判定反转链表的头节点的依据是当前节点的下一个节点为null

   

反转过程,就是将前一个节点作为当前节点的下一个节点,将当前节点作为前一个节点,最后将下一个节点作为当前节点,实现链表的遍历继续进行下去

   

package reverseList16;

   

public class ReverseList16 {

   

public static void main(String[] args) {

// TODO Auto-generated method stub

ListNode headNode=new ListNode();

headNode.data=1;

ListNode l1=new ListNode();

l1.data=2;

ListNode l2=new ListNode();

l2.data=3;

headNode.nextNode=l1;

l1.nextNode=l2;

l2.nextNode=null;

printList(headNode);

ListNode resultNode=reverseList(headNode);

printList(resultNode);

}

static void printList(ListNode headNode){

System.out.print(headNode.data+"-->");

while (headNode.nextNode!=null) {

headNode=headNode.nextNode;

if (headNode.nextNode==null) {

System.out.println(headNode.data);

}else {

   

System.out.print(headNode.data+"-->");

}

}

   

}

static ListNode reverseList(ListNode head){

if (head==null) {

return null;

}

ListNode preNode=null;

ListNode nowNode=head;

ListNode resultNode =null;

while (nowNode!=null) {

ListNode nextNode=nowNode.nextNode;

if (nextNode==null) {

resultNode=nowNode;

}

nowNode.nextNode=preNode;

preNode=nowNode;

nowNode=nextNode;

}

return resultNode;

   

}

}

class ListNode{

int data;

ListNode nextNode;

}

posted @ 2015-03-22 12:13  keedor  阅读(173)  评论(0编辑  收藏  举报