剑指offer:反转链表

做~自己de王妃 提交于 2020-01-28 14:02:25

一、题目描述

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

 

二、思路

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

  

 

 

 

 

 

 

 

 

 三、代码

 

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;
    	}
    }
}

  

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!