Day 32
题目描述

思路
采取快慢指针
/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public boolean hasCycle(ListNode head) {
       ListNode fast = head;
		ListNode slow = head;
		// 空链表、单节点链表一定不会有环
		while (fast != null && fast.next != null) {
			fast = fast.next.next; // 快指针,一次移动两步
			slow = slow.next;      // 慢指针,一次移动一步
			if (fast == slow) {   // 快慢指针相遇,表明有环
				return true;
			}
		}
		return false; // 正常走到链表末尾,表明没有环
    }
}
题目描述

思路
由于l1和l2是倒序排列的,也就是从低位到高位,那么直接按照顺序相加,记录进位,如果l1和l2其中一个加到尾部了,另外一个加0和进位即可,最后返回结果
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode res=new ListNode();
        ListNode head=res;
        int num=0;//模拟进位
        while(l1!=null&&l2!=null){
            int x=l1.val+l2.val+num;
            if(x>=10){
                num=1;
                res.next=new ListNode(x%10);
                res=res.next;
            }
            else{
                num=0;
                res.next=new ListNode(x);
                res=res.next;
            }
            l1=l1.next;
            l2=l2.next;
        }
        if(l1==null){
            while(l2!=null){
                int x=num+l2.val;
                if(x>=10){
                num=1;
                res.next=new ListNode(x%10);
                res=res.next;
            }
            else{
                num=0;
                res.next=new ListNode(x);
                res=res.next;
            }
            l2=l2.next;
            }
        }
        else{
            while(l1!=null){
                int x=num+l1.val;
                if(x>=10){
                num=1;
                res.next=new ListNode(x%10);
                res=res.next;
            }
            else{
                num=0;
                res.next=new ListNode(x);
                res=res.next;
            }
            l1=l1.next;
            }
        }
        if(num==1)
        {
            res.next=new ListNode(1);
            res=res.next;
        }
        return head.next;
    }
}



















