Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Jul 24, 2023. It is now read-only.

Commit 4c9bf25

Browse files
author
cd155
committed
add 2.1 remove dup in the linked list
1 parent 1408fff commit 4c9bf25

File tree

1 file changed

+42
-1
lines changed

1 file changed

+42
-1
lines changed

‎src/LinkedList.hs

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,47 @@ import Basics (Nat)
66
-- A sequence of nodes, simple very of graph
77
data LinkedList a = Null'| Node' a (LinkedList a) deriving Show
88

9+
instance Eq a => Eq (LinkedList a) where
10+
Null' == Null' = True
11+
Null' == (Node' _ _) = False
12+
(Node' _ _) == Null' = False
13+
(Node' x1 x2) == (Node' y1 y2) = x1 == y1 && x2 == y2
14+
15+
testLink = Node' 1 $ Node' 2 $ Node' 1 $ Node' 5 $ Node' 2 $ Node' 3 Null'
16+
17+
{-
18+
2.1
19+
Write code to remove duplicates from an unsorted linked list.
20+
21+
Test Case:
22+
removeDup testLink
23+
-}
24+
removeDup :: Eq a => LinkedList a -> LinkedList a
25+
removeDup xs = removeDupHelper xs []
26+
27+
removeDupHelper :: Eq a => LinkedList a -> [LinkedList a] -> LinkedList a
28+
removeDupHelper Null' _ = Null'
29+
removeDupHelper (Node' x y) dict
30+
| Node' x Null' `elem` dict = removeDupHelper y dict
31+
| otherwise = Node' x (removeDupHelper y (Node' x Null':dict))
32+
33+
-- (no dict)loop into the original list, and refine the result list
34+
removeDupBF :: Eq a => LinkedList a -> LinkedList a
35+
removeDupBF xs = removeDupBFHelper xs xs
36+
37+
removeDupBFHelper :: Eq a => LinkedList a -> LinkedList a -> LinkedList a
38+
removeDupBFHelper Null' refined = refined
39+
removeDupBFHelper _ Null' = Null'
40+
removeDupBFHelper (Node' x l1) (Node' y l2) =
41+
removeDupBFHelper l1 (refineLink (Node' x Null') (Node' y l2) True)
42+
43+
refineLink :: Eq a => LinkedList a -> LinkedList a -> Bool -> LinkedList a
44+
refineLink _ Null' _ = Null'
45+
refineLink x (Node' y l) isFirst
46+
| (x == Node' y Null') && not isFirst = refineLink x l isFirst
47+
| (x == Node' y Null') && isFirst = Node' y (refineLink x l False)
48+
| otherwise = Node' y (refineLink x l isFirst)
49+
950
{-
1051
4.3 Given a binary tree, design an algorithm which creates
1152
a linked list of all the nodes at each depth.
@@ -35,6 +76,6 @@ divideTreeHelper xs track (Just y:ys) =
3576
-- Check whether it is belong to the set of power of two
3677
isPowerOfTwo :: Nat -> Bool
3778
isPowerOfTwo 1 = True
38-
isPowerOfTwo x
79+
isPowerOfTwo x
3980
| x `mod` 2 == 1 = False
4081
| otherwise = isPowerOfTwo (x `div` 2)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /