zero_shubham1

Remove Friends Hackerearth problem

May 5th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 2.03 KB | None | 0 0
  1. package main
  2.  
  3. import "fmt"
  4.  
  5. type linkedList struct {
  6.     data       int
  7.     next, prev *linkedList
  8. }
  9.  
  10. func addNode(data int, root *linkedList) *linkedList {
  11.     if (*root).next == nil && (*root).prev == nil {
  12.         (*root).data = data
  13.         (*root).next = new(linkedList)
  14.         return root
  15.     }
  16.     pointer := root
  17.     for (*pointer).next.next != nil {
  18.         pointer = (*pointer).next
  19.     }
  20.     (*pointer).next.data = data
  21.     (*pointer).next.prev = pointer
  22.     (*pointer).next.next = new(linkedList)
  23.     return pointer
  24. }
  25.  
  26. func drop(pointer *linkedList) {
  27.     (*pointer).prev.next = (*pointer).next
  28.     (*pointer).next.prev = (*pointer).prev
  29. }
  30.  
  31. func traverse(pointer *linkedList) {
  32.     for (*pointer).next != nil {
  33.         //fmt.Println("debug ->", *pointer)
  34.         fmt.Printf("%d ", (*pointer).data)
  35.         pointer = (*pointer).next
  36.     }
  37. }
  38.  
  39. func main() {
  40.     var tmpData int
  41.     var N, K, testcases int
  42.  
  43.     fmt.Scanf("%d", &testcases)
  44.  
  45.     for testcases != 0 {
  46.         fmt.Scanf("%d %d", &N, &K)
  47.  
  48.         root := new(linkedList)
  49.         var nextInsert *linkedList
  50.  
  51.         for i := 0; i < N; i++ {
  52.             fmt.Scanf("%d", &tmpData)
  53.             if nextInsert == nil {
  54.                 nextInsert = addNode(tmpData, root)
  55.             } else {
  56.                 nextInsert = addNode(tmpData, nextInsert)
  57.             }
  58.         }
  59.  
  60.         var g *linkedList
  61.         pointer := root
  62.  
  63.         for K != 0 && (*pointer).next.next != nil {
  64.  
  65.             if (*pointer).data < (*pointer).next.data {
  66.                 tmp := pointer
  67.                 if root == tmp {
  68.                     root = (*root).next
  69.                     pointer = root
  70.                     (*root).prev = nil
  71.                     (*tmp).next = nil
  72.                     K--
  73.                     continue
  74.                 }
  75.                 drop(tmp)
  76.                 K--
  77.             } else {
  78.                 if g != nil {
  79.                     if (*g).data < (*pointer).data {
  80.                         tmp := g
  81.                         g = nil
  82.                         if root == tmp {
  83.                             root = (*root).next
  84.                             pointer = root
  85.                             (*root).prev = nil
  86.                             (*tmp).next = nil
  87.                             K--
  88.                             continue
  89.                         }
  90.                         drop(tmp)
  91.                         K--
  92.                     }
  93.  
  94.                 } else {
  95.                     g = pointer
  96.                 }
  97.             }
  98.             pointer = (*pointer).next
  99.         }
  100.         for K != 0 {
  101.             tmp := pointer
  102.             pointer = (*pointer).prev
  103.             drop(tmp)
  104.             K--
  105.         }
  106.         traverse(root)
  107.         fmt.Print("\n")
  108.         testcases--
  109.     }
  110. }
Add Comment
Please, Sign In to add comment