天天看點

程式員代碼面試指南連結清單列印兩個有序連結清單的公共部分删除單連結清單中的第K個節點

列印兩個有序連結清單的公共部分

  • head1<head2 head1向前移動
  • head1>head2 head2向前移動
  • head1 = head2 添加head1到結果集 head1和head2 都向前移動
public void printCommonpart(ListNode list1,ListNode list2)
    {

        while(list1!=null&&list2!=null){
            if(list1.val<list2.val)
            {
                list1 =list1.next;
            }
            else if(list1.val>list2.val)
            {
                list2 = list2.next;
            }
            else{
                System.out.println(list1.val);
                list1 = list1.next;
                list2 = list2.next;
            }
        }
    }

           

删除單連結清單中的第K個節點

public ListNode removeLastKthNode(ListNode list,int k) {
        ListNode tmp = list;
        ListNode head = new ListNode();
        ListNode res = head;
        head.next = list;
        while(k>0)
        {
            tmp = tmp.next;
            k--;
        }
        while(tmp!=null)
        {
            tmp = tmp.next;
            list = list.next;
            head = head.next;
        }
        //if(head.next==res)  如果res是list的話要做這一步的判斷
        //[1,2,3,4,5]
        //5
        //  可能删除的就是res本身
        //    return res.next;
        head.next = head.next.next;
        return res.next;
        //如果是res 是head 的話那麼就可以直接傳回res.next了
    }
           

繼續閱讀