码迷,mamicode.com
首页 > 其他好文 > 详细

剑指Offer--翻转链表

时间:2015-08-12 23:43:37      阅读:370      评论:0      收藏:0      [点我收藏+]

标签:

//链表的定义
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
//迭代
/*问题:
    1.输入为空
    2.只有一个结点
    3.头结点的特殊处理
    4.改变结点的next值时,链表会断开,怎么处理?
    5.翻转完成是新链表的头结点?
    6.迭代时 循环的终止条件?
*/
public class Solution {
    public ListNode ReverseList(ListNode head) {
        if(head==null||head.next==null){//解决问题1和2
            return head;
        }
        ListNode p=head.next;
        head.next=null;  //解决问题3
        ListNode pre=head;
        ListNode tmp=p.next;//解决问题5:用于链表断开时,记录下一个链表
        //循环终止条件需要自己模拟翻转步骤,问题6
        while(p!=null){
            p.next=pre;
            pre=p;
            p=tmp;
            if(tmp!=null){
              tmp=tmp.next; 
            } 
        }
        head=pre;
        return head;
    }
}
//递归法
public class Solution {
    public ListNode ReverseList(ListNode head) {
	if(head==null||head.next==null){
          return head;  
        }else{
            ListNode newHead=ReverseList(head.next);
            head.next.next=head;
            head.next=null;
            return newHead;
        }
        
    }
}


剑指Offer--翻转链表

标签:

原文地址:http://my.oschina.net/dadou/blog/491605

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!