diff --git a/codes/typescript/chapter_searching/linear_search.ts b/codes/typescript/chapter_searching/linear_search.ts new file mode 100644 index 000000000..05620f913 --- /dev/null +++ b/codes/typescript/chapter_searching/linear_search.ts @@ -0,0 +1,47 @@ +/** + * File: linear_search.ts + * Created Time: 2023-01-07 + * Author: Daniel (better.sunjian@gmail.com) + */ + +import ListNode from '../module/ListNode.ts'; + +/* 线性查找(数组) */ +function linearSearchArray(nums: number[], target: number): number { + // 遍历数组 + for (let i = 0; i < nums.length; i++) { + // 找到目标元素,返回其索引 + if (nums[i] === target) { + return i; + } + } + // 未找到目标元素,返回 -1 + return -1; +} + +/* 线性查找(链表)*/ +function linearSearchLinkedList(head: ListNode | null, target: number): ListNode | null { + // 遍历链表 + while (head) { + // 找到目标结点,返回之 + if (head.val === target) { + return head; + } + head = head.next; + } + // 未找到目标结点,返回 null + return null; +} + +/* Driver Code */ +const target = 3; + +/* 在数组中执行线性查找 */ +const nums = [ 1, 5, 3, 2, 4, 7, 5, 9, 10, 8 ]; +const index = linearSearchArray(nums, target); +console.log('目标元素 3 的索引 =', index); + +/* 在链表中执行线性查找 */ +const head = ListNode.arrToLinkedList(nums); +const node = linearSearchLinkedList(head, target); +console.log('目标结点值 3 的对应结点对象为', node); diff --git a/codes/typescript/module/ListNode.ts b/codes/typescript/module/ListNode.ts index 17fdbb955..84f1822f8 100644 --- a/codes/typescript/module/ListNode.ts +++ b/codes/typescript/module/ListNode.ts @@ -14,4 +14,19 @@ export default class ListNode { this.val = val === undefined ? 0 : val; this.next = next === undefined ? null : next; } + + /** + * Generate a linked-list with an array + * @param arr + * @return ListNode + */ + public static arrToLinkedList(arr: number[]): ListNode | null { + const dum = new ListNode(0); + let head = dum; + for (const val of arr) { + head.next = new ListNode(val); + head = head.next; + } + return dum.next; + } }