I think every routing device uses forwarding tables of some kind.
However, some local networks (e.g. switched ethernet) may disable traffic over certain interfaces in order to ensure that the network forms a spanning tree (can reach every node, but has not loops). This is one way to prevent infinite looping packet problems. This is used at the link layer. If you have a spanning tree, then it also simplifies how you fill in your forwarding table, using a simple switch learning mechanism (whichever way a packet came from, you should direct traffic that way in order to reach that packet's source).
However, it's also possible to use another mechanism (like TTL) to stop infinitely looping packets, which is what routers at the network level (using IP) do. These routers can be connected in redundant ways so that there are multiple paths that can reach the same destination (thus, they do not form a spanning tree). However, these routers do still have forwarding tables, which (hopefully) have entries that tell the router which way to send their packets along the shortest path to get to a destination IP address (or range of addresses, using the longest-prefix-match). These forwarding tables can get built up by algorithms like Bellman Ford, to find these shortest paths.