Edit in JSFiddle

function FY_sort(list){
    let len = list.length;
    let sel;
  
    while(len){
        sel = Math.floor(Math.random() * len--);
        [list[len], list[sel]] = [list[sel], list[len]];
    }
  
    return list;
}

function exclusive_pop(list, exclude){
    let candidate = list.pop();
  
    if(candidate !== exclude)
        return candidate;

    list.unshift(candidate);
    return list.pop();
}

function getchain(list){
    let head = list.shift();
    let out = head.slice(0);
    let candidate = null;
    
    while((candidate = list.find(x => x[0] === out[out.length-1])) !== undefined){
        out.push(candidate[1]);
        list.splice(list.indexOf(candidate), 1);
    }
        
    return out;
}

function write_chains(list){
    let newlist = list.slice(0);
    let chains = new Array;
    
    while(newlist.length > 0)
        chains.push(getchain(newlist));
    
    out.value += `\nChains: ${chains.length} / ${list.length}\n\n`;
    
    chains.forEach(function(chain){
        out.value += chain.join(" -> ") + " -> ...\n\n";
    });
}

function runit(){
    let l1 = names.value.split(",");
    let l2 = FY_sort(l1.slice(0));
    let l3 = new Array;
  
    out.value = "";

    l1.forEach(function(el){
        l3.push([el, exclusive_pop(l2, el)]);
    });
    
    l3.forEach(function(el){
        out.value += el.join(" -> ") + "\n";
    });
    
    write_chains(l3);
}

names.value = "Albert,Julia,Mandelbrot,Alzheimer,Asperger,Wolfgang,Ludwig,Washington,Ivan,Trump";

names.addEventListener("keydown", function(ev){
    if(ev.key === "Enter")
        runit();
});
<input id=names><br><textarea id=out placeholder="Press Enter in the above field to run the generator"></textarea>
textarea{
  width:100%;
  height:500px;
}
input{
  width:100%;
}