CHARLOTTE, North Carolina — Cody Zeller's up-and-down night ended with a wide smile in the locker room.
"This would have been a tough one to swallow if I hadn't made the play at the end," Zeller said.
Or had Kristaps Porzingis' 3-pointer at the buzzer not been ruled too late to count.
After missing two free throws with 28 seconds left in a tie game, Zeller came back and scored on a layup off an inbounds play with 0.6 seconds remaining to lift the Charlotte Hornets over the New York Knicks, 95-93 on Wednesday night.
Zeller set a pick for Jeremy Lin under the Hornets basket, then alertly released to the hoop inside of Robin Lopez, took the feed from Spencer Hawes and made a leaning right-handed layup in front of the basket.
Zeller's first game-winner since high school was nearly for naught when it appeared Porzingis had won the game with a 29-footer. Officials huddled and ruled that he didn't get the shot off in time after a video review.
Zeller was the man covering Porzingis and allowed him to come free.
"Just a relief," Zeller said. "It was a roller-coaster ride for me, missing those two free throws, then making that shot and then I thought I gave it away at the end."
Coach Steve Clifford defended Zeller, saying he did what he was supposed to do on defense on the Knicks' final play. He also credited Hawes for making the right decision on the inbounds pass to Zeller for the winner.
"Spencer made the play because he used a good pass fake and there were options for him on either side," Clifford said. "I think who's inbounding the ball right there is a big deal and he made a good play."
Nicolas Batum led the Hornets with a season-high 24 points and Lin chipped in with 17 as Charlotte (4-4) reached .500 for the first time.
Carmelo Anthony scored 29 points, and Aaron Afflalo had 12 points in his regular-season debut for the Knicks. Porzingis had 10 points and 15 rebounds.
The Knicks had 17 turnovers.
The Knicks led 49-47 at the half before Anthony began to heat up. He scored 15 points on 6-of-8 shooting from the field in the third quarter to help the Knicks open a double-digit lead.
But Charlotte's Jeremy duo — Lamb and Lin — helped even the score at 82 with 8:14 left in the game. Lamb, who is 18 of 26 from the field the last three games, scored 14 points.
The Knicks had a chance to take the lead in the final seconds but Anthony's baseline jumper from the left wing hit the side of the backboard and the shot clock expired with 3.7 seconds left.
"I didn't deliver," Anthony said. "I had in my mind I was going to deliver. Everything felt good going into it. I swept through and Marvin (Williams) tipped the ball a little bit and I lost control of it. It's just one of those opportunities I didn't take advantage of."
The Hornets tried to inbound the ball, but it hit off a Knicks player and went out of bounds under the Charlotte basket with 2.2 seconds left setting up Zeller's layup.
Knicks: New York outrebounded Charlotte 52-33. ... The Knicks attempted only two free throws in the first half.
Hornets: Walker missed all six shot attempts in the first half. ... Improved to 4-0 when leading at the half this season.
WHERE ARE THE STARS?:
Charlotte's top players, Al Jefferson and Kemba Walker, combined to shoot 4 of 21 from the field and were benched for most of the fourth quarter due to their struggles. The Hornets continue to get outstanding play from their bench though, outscoring the Knicks 45-29.
Afflalo missed the first eight games with hamstring issues, but started and played 28 minutes. "He has a presence out there on the floor," coach Derek Fisher said. "He's physical on both ends. We're hoping he'll continue to get better and stronger as he goes. Hopefully, he'll get some rest tomorrow without any setbacks and get back on the floor Friday night."
Knicks: Host Cleveland on Friday night.
Hornets: Visit Chicago on Friday night.