算法题:lintcode#35 翻转链表(java)

来源:互联网 发布:淘宝一件代发怎么付款 编辑:程序博客网 时间:2024/06/05 01:52

样例:

给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null

思路:

1.首先,传入头节点,进行非空判断

2.实现链表翻转的思路:从尾节点开始,第个节点依次指向前一个节点,然后将头节点指向空,这样就只留下了以原尾节点开始,原头节点结束的链表


3.本题具体实现方法:用名为curr的节点来代表前一个节点,名为next的节点代表后一个节点,名为temp的节点来保存next.next的节点



这样,通过赋值,三个节点依次向链表尾移动,使后一个节点指向前一个节点,直到next为空值,循环结束


解题:

1.在另外一个class文件中定义节点

public class ListNode {    public int val;    public ListNode next;    public ListNode(int val) {        this.val = val;        this.next = null;    }}
2.翻转链表

public class Solution {    public ListNode reverse(ListNode head) {        if (head == null || head.next == null)            return head;        ListNode curr = head;        ListNode next = curr.next;        while (next!=null ){            ListNode temp= next.next;             next.next =curr;             curr=next;             next=temp;        }        head.next=null;//将头节点指向空,只留下以原尾节点开始,原头节点结束的链表        return curr;    }}



原创粉丝点击