当然老是在虎牢关下停留也不是个事,窦建德终于决定向虎牢关发起总攻。不久唐军就得到情报说窦建德将趁唐军马匹饲料用尽,在黄河北岸牧马之际,袭击虎牢。武德四年(公元621年)五月一日,李世民北渡黄河,南临广武(即西广武,在今河南荥阳东北广武山上),侦察敌情。最后决定,将计就计,故意留马千匹在河滩之上,引诱敌军出击。第二天,窦建德果然全军出动,北倚黄河,南连鹊山,在汜水东岸南北宽二十多里的宽阔地带布置军阵。王世充的部将郭士衡也率部在窦军之南布阵,“绵亘数里”,大肆“鼓噪”,以壮声威。面对强敌压境,唐将都有点心怯。李世民率数骑登高瞭望后,对众将说,窦建德兴起山东,从未参与大战,现在冒险喧嚣,一点纪律都没有,逼城布阵,对我军十分轻视;我军如果按兵不出,敌军的勇气自然会低落下去。过不了多久敌人必然会因为饥疲而退兵,那时候我军趁势出击,必胜无疑。并对诸将发誓说:“过了中午就能打败他们!”因此,他严阵以待,尽管窦建德多次派兵挑战,他也拒不出击。
面对作乌龟状的唐军,窦建德也有点急。于是也学李世民,派了三百精锐骑兵渡过汜水,在距离唐营一里的地方停下。派人向唐军挑衅:“有种你们也找几百精锐,咱们比试比试!”对于这样的挑战李世民从来不会回避,当然更不会以多欺少。仅仅派王君廓率二百步兵手执长矛应战。两军交锋之下,乍进乍退,两无胜负,各自引军退回。此时王世充的侄子,代王王琬骑着隋炀帝御马,马甲齐全,全套重型披挂,在两军阵前耀武扬威。李世民也是爱马之人,于是赞叹道:“这真是一匹好马啊!”尉迟敬德听见后便如《三国演义》里面赵云为刘备取的卢马一般,决意要为李世民夺下这匹好马。李世民当然不肯,说:“怎么能为了区区一匹马让我军猛将陷入险境呢?”尉迟敬德执意不肯,硬是与高甑生、梁建方三骑将冒着枪林箭雨直冲入敌阵,擒下王琬,牵着他的马回归本阵,夏军内无人敢阻挡。战斗到这个份上,李世民感觉时机已经成熟,于是派人召回留在河滩上的战马,准备开始总攻。
窦建德从辰时布阵,到午时已历三个时辰,士卒饥渴困倦,此时农民军纪律差的弱点暴露无遗。有的席地而坐,有的争抢饮水,有的准备退却。李世民看到决战的时刻已经来到,便命令宇文士及率三百余骑从窦建德军阵西面驰向阵南,进行试探性攻击。并告诫说:如敌阵不动,应立即退回,如阵势移动,则引兵向阵东进发。宇文士及率部驰至窦建德阵前,夏军果然骚动。这时,河滩上的战马也被领回,李世民立即下令唐军全线出击。他亲率轻骑首先冲出,唐军主力紧随其后,东渡汜水,直向夏军阵前杀来。窦建德此时正要召集群臣议事,唐军突然杀来,这帮大臣乱作一团,匆忙奔向窦建德处躲避。
结果反而阻塞了夏军骑兵的道路。窦建德只得在宫室前面挥手让群臣后退,使骑兵抵抗唐军。但混乱之中,唐兵已至。窦建德大惊失色,慌忙向东陂撤退。唐将窦抗率部紧追,夏军拼死抵抗,唐军一时不得寸进。这时候李世民拍马赶到,率骑兵接阵冲击,所向披靡。当时淮阳王李道玄挺身陷阵,直出敌后,又突阵而归,往来两次,飞矢集身,状若猬毛,而勇气不衰。他张弓劲射,敌军皆应弦而倒。其余将士,亦奋勇向前,喊声大作,尘埃蔽天。李世民率史大奈、程知节、秦叔宝等勇将在激战之中,直穿敌后,在夏军阵后打起了唐军旗帜。夏军将士望见阵后唐旗,遂全线崩溃,向西撤退,唐军追击三十多里,歼敌三千。
窦建德在逃跑的时候被追兵连捅数次,窦建德可没王世充那么好的盔甲,逃至牛口渚就被车骑将军白士让、杨武威追上,慌忙之中窦建德连马都控不住,直摔下马。当时白士让就要拿马槊刺窦建德,这时候窦建德表现得实在不像一个好汉,他大叫道:“别杀我,我是夏王窦建德!”可叹一世豪杰,到此英雄末路之时,也只能作此情状。真所谓“时来天地皆同力,运去英雄不自由。”杨武威追上来将窦建德俘虏。当窦建德见到李世民后两者之间的对话颇为有趣,李世民当时还挺假正经,说:“我军讨伐王世充,跟你有什么关系?居然敢越境挑衅?”搞得一副和平主义的典范一般。窦建德此时倒是幽了一默,说:“我如果不来,您以后还不得大老远跑河北抓我?那多麻烦!我现在送上门岂不更好?”此话其实表面上看有点摇尾乞怜,其实暗地里的意思则是“唐夏早晚都有一战,我不来打你,你也迟早要来打我,这么明摆的事情有什么好问的?”
夏军见主帅被擒,相继投降的有五万多人,李世民将其全部遣归乡里。只有窦建德之妻曹氏率数百骑逃回洺州。无论是李世民还是窦建德之前都恐怕万万没想到,此战居然会以这样无厘头的喜剧方式告终。
虎牢决战结束后,李世民率得胜之师回到洛阳城下,继续围攻王世充。沿途的偃师(今河南堰师东)、巩县(今河南巩义东北)以及洛阳故城(在今洛阳东洛水北岸)的王世充守将纷纷投降。王世充苦等了好几个月,没有等到窦建德的解围大军,反而等到了身为俘虏的窦建德。当李世民将俘获的窦建德和王世充的部将郭士衡等带至洛阳城下后,王世充立刻就崩溃了,与窦建德“相对无言,惟有泪千行”。他在绝望之余,向诸将提议突围而出,南走襄阳。但却遭到诸将的一致反对,王世充在突围无望、守城不得的形势下,遂于五月九日出城投降。第二天,李世民率军进入洛阳,严令守护街市,维持治安,秋毫无犯。又封存府库,将金帛财物分赏有功将士。
只将王世充党羽中的段达、王隆、单雄信、郭士衡等十多人斩于洛水之上,其余不戮一人。这时候又发生了评书演义里面最著名的桥段之一——李世绩与单雄信的最后送别。徐世绩与单雄信是好友,当年誓同生死,所以极力求情,说单雄信武艺超群,对国家有大用处,并且愿以自己的官爵赎单雄信的性命,留他为唐军效力,可是李世民不准。处刑当日,徐世绩前往送行,单雄信说:“我就知道你不办事。”徐世绩说:“我本当与兄同死,但是我既然以身许国,忠义就无法两全。再说我死以后,谁来照顾兄的妻小呢?”接着从自己的大腿上割下一块肉,说:“让这块肉随兄入土,不负我们当年的誓言!”当单雄信死时李世绩恸哭不已,之后还收养了单雄信的儿子,将其抚养成人。在此种城头变幻大王旗的乱世年月,居然能有如此深厚的兄弟情义,实在是不容易。
此后按照李渊的老习惯,凡是称王称帝的反王就一个不留,要统统干掉,所以窦建德直接被被送斩长安,而王世充因为李世民答应不杀他,因此李渊卖了儿子一个面子当时没有动手,但是终究还是没有放过王世充,在徙蜀途中就被仇家所杀,其余子侄也被安上谋反的罪名处死。两大反王的灭亡,终于让乱世到了该终结的时候。
平刘黑闼
一举平定河南河北之后,唐朝席卷天下已经成为定局,可是此时唐王朝却犯了一个错误,唐朝派去河北的官吏对窦建德的老部下横挑鼻子竖挑眼,动不动就关起来,甚至随意用刑,很有点秋后算账的味道。此后李渊还颁布诏令,要窦建德的部将们去长安。要知道李渊从来就不是一个心胸宽大的人,自李唐建国以来被打败的反王基本上没几个有好下场,李密、王世充、窦建德、杜伏威等人不是暗地里被干掉就是明正典刑,这些窦建德的老部下自然不会认为李渊会有什么好意。他们都是杀人越货刀头舔血的主,任人宰割可不是他们的一贯作风。就这样大伙儿一合计,都觉得按照李渊一贯的作为,这去了必定是有死无生,既然横竖都是死,那干脆就反了,于是众人推举刘黑闼为头,起兵反唐。这唐朝趁机平定了窦建德、王世充,突厥那边也没闲着,新即位的颉利可汗在此期间整合内部,将突厥汗国的大权牢牢地掌握在了自己的手里。唐朝一统中原之后突厥本无机可乘,可是刘黑闼的起兵却给了突厥人绝好的机会。两家一拍即合,迅速勾搭在了一起。
刘黑闼是窦建德手下头号猛将,打仗很是有两把刷子,加上突厥又出兵援助,唐军猝不及防之下就吃了很大的亏。此时唐朝派淮安王李神通与幽州总管李艺统兵平叛,李神通率关内兵与李艺(这个李艺便是演义中号称“气死小辣椒,不让独头蒜”之罗成的老爹罗艺,本来割据一方,后来归附唐朝之后赐姓为李。)汇合于冀州之后又征发附近六州五万士卒,布阵十余里,与刘黑闼会战于饶阳城南。刘黑闼兵少,排不了如唐军般地长阵,于是让军队背靠长堤,减少阵型的的厚度以增加长度,来与唐军的长阵向抗衡。
此时风雪漫天,李神通于顺风之时领全军突击,寄希望以天时加兵力的优势将刘黑闼一举打垮。可是天公不作美,没等冲到跟前,风向突变,反而变成了唐军逆风,刘黑闼乘势决战,风雪弥漫之下唐军大溃,士马军资失亡三分之二。同时间幽州总管李艺在西面布阵,与刘黑闼部将高雅贤合战,高雅贤不是对手,唐军追杀数里远,可是突然接到本阵失利的消息,无奈之下只能退守藁城(今河北藁城);刘黑闼乘胜追击,李艺也不是对手,初唐大将薛万均、万彻兄弟竟都成了俘虏。李艺不敌之下只能引兵败归幽州,刘黑闼面前再无敌手。战败唐军主力之后刘黑闼再接再厉,当时的黎州总管也就是初唐二李之一的超级名将李世绩被刘黑闼杀得五千步卒全军覆没,李世绩仅以身免。
由于窦建德在河北深得民心,因此打着窦建德继承人旗号的刘黑闼亦深受拥护,短短半年之内,刘黑闼就杀魏州刺史权威、贝州刺史戴元祥、屯卫将军王行敏、鄱阳刺史裴晞、瀛州刺史卢士睿、毛州刺史赵元恺、冀州刺史麹棱、魏州总管潘道毅等唐朝官吏不计其数,尽数恢复了以前窦建德所占有的地盘。