Shai Hope was out for his overnight score of 147, the top score in an innings where he put on 246 for the fourth wicket with Kraigg Brathwaite (134), when caught behind off James Anderson's first ball Sunday.
Anderson made it two wickets in two balls when Shane Dowrich was caught by England captain Joe Root at second slip to leave West Indies 329 for seven.
That left Anderson three away from becoming the first England bowler to take 500 Test wickets and he finished the innings with figures of five for 76 in 29 overs.
He put on 75 in 94 balls for the eighth wicket with West Indies captain Jason Holder (43), who survived Anderson's hat-trick ball.
After a vastly improved bowling display in England's first innings at Headingley, this was an equally dramatic surge in West Indies' batting fortunes after they lost 19 wickets inside a day while being dismissed for just 168 and 137 during last week's innings and 209-run defeat at Edgbaston in the first of a three-Test series.