反转链表

反转链表

http://www.nowcoder.com/questionTerminal/75e878df47f24fdc9dc3e400ec6058ca

第一种:递归法

解释一下:
经过head.next.next=head;使得head.next的next指针指向head
经过head.next=null;使得head的next指针指向空
所以这两句语句的作用就是使head与head->next的指向反转。
/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode ReverseList(ListNode head) {
        //递归实现
        if(head==null||head.next==null){//链表为空或者只有一个元素
            return head;
        }
        //先反转后面的链表,走到链表的末端结点
        ListNode p = ReverseList(head.next);
         //再将当前节点设置为后面节点的后续节点
        head.next.next=head;
        head.next=null;
        return p;
    }
}

第二种:头插法

解释:这里涉及到head,pre,next三个结点
作用:使原本指向为head->(head->next)变为(head->next)->head


public class Solution {
    public ListNode ReverseList(ListNode head) {
        if(head==null||head.next==null){//该链表无结点或只有一个结点
            return head;
        }
        ListNode pre = null;
        ListNode next = null;
        while(head!=null){
            next = head.next;
            head.next = pre;
            pre = head;
            head = next;
        }
        return pre;
    }
}

第三种:遍历+栈保存






最后,附上测试代码,只需改动ReverseList函数的内容,其他无需改动
class ListNode {
    int val;
    ListNode next = null;
    public ListNode(int val) {
        this.val = val;
    }
}
class Solution {
	public static ListNode ReverseList(ListNode head) {
        //递归实现
        if(head==null||head.next==null){//链表为空或者只有一个元素
            return head;
        }
        //先反转后面的链表,走到链表的末端结点
        ListNode p = ReverseList(head.next);
         //再将当前节点设置为后面节点的后续节点
        head.next.next=head;
        head.next=null;
        return p;
    }
	public static void Myprint(ListNode t1)
	{
		while(t1!=null){
    		System.out.println(t1.val);
    		t1=t1.next;
    	}
	}
	public static void main(String[] args) {
		ListNode t1 = new ListNode(1);
    	ListNode t2 = new ListNode(2);
    	ListNode t3 = new ListNode(3);
    	
    	t1.next=t2;
    	t2.next=t3;
    	t3.next=null;
    	
    	Myprint(t1);
    	System.out.println("--------反转之后的链表-------");
    	ListNode r = ReverseList(t1);
    	Myprint(r);
	}
}
















全部评论

相关推荐

10-30 10:16
南京大学 Java
龚至诚:给南大✌️跪了
点赞 评论 收藏
分享
霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
1 1 评论
分享
牛客网
牛客企业服务