#Python 3, 279 277 258 251 bytes
Python 3, 279 277 258 251 bytes
k=str.replace def f(x): z=len(x) y='--'*(['-1']==[c for c in x if'0'!=c][:1]) for i,v in enumerate(x): p=str(z+~i) if v in'-1'and~i+z:y+='+x^'+p elif'0'!=v:y+='+'+v+'x^'+p return y and k(k(k(k(y[1:],'+-','-'),'^1',''),'x^0',''),'-+','-')or 0 Takes input as a list of strings. This solution is not highly golfed yet. This basically works by replacing things to suit the output format, which highly increases the byte count.
Special thanks to ovs and NK1406.