If you do want a head start for CS1101S, you can take the following Coursera courses:
https://www.coursera.org/learn/programming-languages
https://www.coursera.org/learn/programming-languages-part-b
They are based on the same materials taught in CS1101S, but with more rigour in their definitions, more emphasis on the benefits and trade-offs of functional programming, and also share the same goal of communicating computational process concisely as opposed to just strewing a bunch of code together and producing something that works. I took those courses during NS and CS1101S was more of a recap with more additional practices.
Do take note that the languages taught are certainly different; the Coursera courses use Standard ML and Racket while CS1101S uses Source, a subset of the better parts of JavaScript with a largely functional-style standard library. However, the language is not the key here and the goal is to establish a framework in your mind on how to reason and write programs that that communicates your ideas concisely.
There are also additional topics like Order of Growth, which you can refer to u/wild-berry-berry's fantastic reference to Abdul Bari.
If you want to clear your CS1101S requirements earlier, NUS has a programme called iBLOC; if you're an NSF, you can take CS1010X near the end of your service and transfer the credits earned in place of CS1101S when the semester starts. This way, you can fast track and take certain modules such as CS2030S as early as your first semester. Do take note however that CS1010X favours Object-Oriented Programming (OOP) much more over its functional counterpart. If you do want to dive into OOP too, you can follow up from the Coursera course mentioned earlier and attempt the next part:
https://www.coursera.org/learn/programming-languages-part-c
Lastly, do study discrete math if you're not familiar with proving; it is the backbone of CS.
Hope it helps.