剑指offer:反转链表

一、题目描述

  输入一个链表,反转链表后,输出新链表的表头。

 

二、思路

  使用迭代的思想,从前往后遍历链表。定义三个指针,分别指向三个相邻的结点。反转前两个节点,然后将三个指针依次后移。直到第二个指针为空。最后再处理链表头尾结点。

  

 

 

 

 

 

 

 

 

 三、代码

 

public class 反转链表 {
	
	public class ListNode {
	    int val;
	    ListNode next = null;

	    ListNode(int val) {
	        this.val = val;
	    }
	}
	
    public ListNode ReverseList(ListNode head) {
    	if(head==null||head.next==null){
    		return head;
    	}
    	else{
    		ListNode p1 = head;
    		ListNode p2 = p1.next;
    		ListNode p3 = p2.next;
    		
    		while(p2!=null){
    			p3 = p2.next;
    			p2.next = p1;  //第二个结点指向第一个结点进行反转
    			p1 = p2;	   //第一个结点后移	
    			p2 = p3;	   //第二个结点后移
    		}
    		
    		head.next = null;
    		head = p1;
    		return head;
    	}
    }
}

  

posted @ 2020-01-28 13:22  DXYE  阅读(150)  评论(0编辑  收藏  举报