題目8 假定兩個帶頭節點的單鏈表,儲存單詞,字尾相同時共享相同空間,找出共同字尾的起始位置。
阿新 • • 發佈:2019-01-10
-
假定兩個帶頭節點的單鏈表,儲存單詞,字尾相同時共享相同空間,找出共同字尾的起始位置。
首先:這裡給出建立的程式碼:至於createList函式,寫在了標頭檔案中,後面統一給出。 char word1[]={'l','o','a','d'}; char word2[]={'p','l','a','y'}; char last[]={'i','n','g'}; Node* node1 = createList(word1, 4, true);//帶頭結點 Node* node2 = createList(word2, 4, true);//帶頭結點 Node* nodelast = createList(last, 3, false);//不帶帶頭結點 //連線 connect(node1, nodelast); connect(node2, nodelast); void connect(Node*& A, Node*& B){ if(A==NULL) return ; Node* p=A; while(p->next!=NULL){ p=p->next; } p->next=B; }
如loading 和 thing 相同的無疑是i 誤區:錯誤的認為可以簡單的理解為長度做減法,然後求倒數第一個,按照位置求解。 正確解法,求長度,從最大相同長度的位置開始比較,即從較短的單詞的第一個元素,較長的單詞的移動到和較短的對照的長度的位置處比較,比較指標地址。 Node* search_commonNode(Node *a, Node *b){ int c1 = getListLength(a, true);//自定義工具函式,在標頭檔案中定義,計算長度 int c2 = getListLength(b, true); while(c1>c2){ a=a->next; c1--; } while(c1<c2){ b=b->next; c2--; } while(a->next!=NULL and a->next!=b->next){ a=a->next; b=b->next; } return a->next; }
上面這道題,看似簡單實際上比較容易理解錯誤,應該自己先理清邏輯,然後自己獨立實現試試。
作者:無涯明月
發文時間:2018-10-20