反转链表 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;
}