I haven't got the tables, so you might have to tweak this a little:
SELECT
a1.JobNo,
a1.LineItem,
CASE WHEN a2.LineItem IS NULL THEN NULL ELSE a2.LineItem-1 AS LastLineItem
FROM
TableA a1
LEFT JOIN
TableA a2 on a2.JobNo = PARSENAME(REPLACE(a1.JobNo,'-','.'),2) + '-' + CAST(PARSENAME(REPLACE(a1.JobNo,'-','.'),1) AS INT) + 1
The join works like this: it joins every record of the table with the record with the next jobNo ending, so it joins 11111-0 to 11111-1, 11113-2 to 11113-3 etc.
If the join has a result, then the last item of the previous job is the start of the next job-1, if there is no result, then it is the last job, so by your definition LastLineItem should return NULL.
Again, you might run into a type mismatch or syntax error in my query, because I did not have the change to test it, but it should demonstrate the idea I'm trying here.