1 00:00:00,000 --> 00:00:02,832 >> [MUZIKO Ludante] 2 00:00:02,832 --> 00:00:05,670 3 00:00:05,670 --> 00:00:08,560 >> DOUG LLOYD: Bone, do ĉe tiu punkto de la kurso, 4 00:00:08,560 --> 00:00:15,300 ni kovris multon de la basics de C. Ni scias tre pri variabloj, tabeloj, 5 00:00:15,300 --> 00:00:17,610 punteros, cxiuj bonaj aĵoj. 6 00:00:17,610 --> 00:00:21,610 Tiuj estas ĉiuj ia konstruita en vidi kiel la fundamentals, 7 00:00:21,610 --> 00:00:23,880 sed ni povas fari pli, ĉu ne? 8 00:00:23,880 --> 00:00:27,930 Ni povas kombini aferojn kune en interesaj manieroj. 9 00:00:27,930 --> 00:00:31,010 >> Kaj do ni faru tion, ni komencu disbranĉigi el kio C donas ni, 10 00:00:31,010 --> 00:00:35,270 kaj komenci krei nian propran datumoj strukturoj uzante tiujn konstruaĵo 11 00:00:35,270 --> 00:00:40,590 blokoj kune fari ion vere valora, utila. 12 00:00:40,590 --> 00:00:43,420 Unu vojo ni povas fari tion estas paroli pri kolektoj. 13 00:00:43,420 --> 00:00:48,360 Do ĝis nun ni havis unu speco de datumoj strukturon por reprezenti kolektoj 14 00:00:48,360 --> 00:00:51,030 de ŝati valoroj, similajn valorojn. 15 00:00:51,030 --> 00:00:52,350 Tio estus tabelo. 16 00:00:52,350 --> 00:00:57,020 Ni havas kolektojn de entjeroj, aŭ kolektoj de karakteroj kaj tiel plu. 17 00:00:57,020 --> 00:01:00,890 >> Strukturoj ankaŭ ordigi de datumoj strukturon por kolekti informojn, 18 00:01:00,890 --> 00:01:03,220 sed ĝi ne estas por kolektado kiel valoroj. 19 00:01:03,220 --> 00:01:08,090 Ĝi kutime miksas malsamajn datumtipoj kune ene de sola skatolo. 20 00:01:08,090 --> 00:01:10,750 Sed ĝi ne estas mem uzita ĉeni kune 21 00:01:10,750 --> 00:01:16,920 aŭ kunligi simila erojn, kiel tabelo. 22 00:01:16,920 --> 00:01:20,960 Arrays estas grandaj por elemento rigardu supren sed revokon 23 00:01:20,960 --> 00:01:24,262 ke ĝi estas tre malfacila enmeti en tabelo, 24 00:01:24,262 --> 00:01:26,470 se ni enmeto ĉe la fino de tiu tabelo. 25 00:01:26,470 --> 00:01:29,730 >> Kaj la plej bona ekzemplo mi havas cxar tion inserción varon. 26 00:01:29,730 --> 00:01:31,650 Se vi memoras nian video sur inserción varo, 27 00:01:31,650 --> 00:01:34,110 tie estis multa elspezo implikita en havi 28 00:01:34,110 --> 00:01:37,970 kapti elementojn, kaj movas ilin de la vojo konveni ion 29 00:01:37,970 --> 00:01:41,290 en la mezo de via tabelo. 30 00:01:41,290 --> 00:01:44,690 Arrays ankaŭ suferas de alia problemo, kiu estas inflexibilidad. 31 00:01:44,690 --> 00:01:47,150 Kiam ni deklaras tabelo, ni preni unu pafon ĉe ĝi. 32 00:01:47,150 --> 00:01:49,790 Ni alvenas al diri, mi volas tio multaj elementoj. 33 00:01:49,790 --> 00:01:51,940 Povus esti 100, oni eble esti 1000, oni eble 34 00:01:51,940 --> 00:01:55,930 estu x kie x estas numero kiu la uzanto donis nin ĉe prompto aŭ ĉe la komando 35 00:01:55,930 --> 00:01:56,630 linio. 36 00:01:56,630 --> 00:01:59,905 >> Sed ni nur akiras unu frapon al ĝi, ni ne atingos tiam diru ho, fakte mi 37 00:01:59,905 --> 00:02:04,360 bezonis 101, aŭ mi bezonis x plus 20. 38 00:02:04,360 --> 00:02:07,910 Tro malfrue, ni jam deklaris la tabelo, kaj se ni volas akiri 101 aŭ x 39 00:02:07,910 --> 00:02:12,050 plus 20, ni devas deklari tute alia tabelo, 40 00:02:12,050 --> 00:02:15,540 kopii ĉiujn elementojn de la tabelo super, kaj tiam ni havas sufiĉe. 41 00:02:15,540 --> 00:02:19,880 Kaj kion se ni malpravas denove, kio se ni vere bezonas 102, aŭ x plus 40, 42 00:02:19,880 --> 00:02:21,970 Ni devas fari tion denove. 43 00:02:21,970 --> 00:02:26,250 Do ili estas tre nefleksebla por regrandigi niaj datumoj, 44 00:02:26,250 --> 00:02:29,360 sed se ni kombinas kune iuj de la basics ke ni jam 45 00:02:29,360 --> 00:02:33,230 lernis pri punteros kaj strukturoj, precipe uzante dinamika memoro 46 00:02:33,230 --> 00:02:36,180 atribuo kun malloc, ni povas meti tiujn pecojn kune 47 00:02:36,180 --> 00:02:40,960 krei novajn datumojn structure-- a unuope ligillisto ni povus say-- 48 00:02:40,960 --> 00:02:45,400 kiu permesas kreski kaj ŝrumpi kolekto de valoroj 49 00:02:45,400 --> 00:02:48,800 kaj ni ne havos ajnan malŝparita spaco. 50 00:02:48,800 --> 00:02:53,320 >> Do denove, ni nomas tiun ideon, ĉi nocio, ligillisto. 51 00:02:53,320 --> 00:02:56,320 En aparta, en tiu video ni estas parolas sole ligillisto, 52 00:02:56,320 --> 00:02:59,185 kaj poste alia vídeo ni parolos proksimume duoble ligitaj listoj, kiuj 53 00:02:59,185 --> 00:03:01,560 estas nur variaĵo pri temo ĉi tie. 54 00:03:01,560 --> 00:03:05,200 Sed unuope ligita listo konsistas el nodoj, 55 00:03:05,200 --> 00:03:08,559 nodoj nur esti abstrakta term-- estas nur io mi vokas 56 00:03:08,559 --> 00:03:10,350 jen ian strukturo, resume, mi estas? 57 00:03:10,350 --> 00:03:16,190 Nur tuj nomas ĝin node-- kaj ĉi nodo havas du membroj, aŭ du kampoj. 58 00:03:16,190 --> 00:03:20,300 Ĝi havas datumojn, kutime entjero, karaktero kaleŝego, 59 00:03:20,300 --> 00:03:23,790 aŭ povis esti iu alia datumtipo ke vi difinis kun tipo def. 60 00:03:23,790 --> 00:03:29,290 Kaj ĝi enhavas montrilon al alia nodo de la sama tipo. 61 00:03:29,290 --> 00:03:34,710 >> Do ni havas du aferoj ene de tiu nodo, datumoj kaj puntero 62 00:03:34,710 --> 00:03:36,380 al alia nodo. 63 00:03:36,380 --> 00:03:39,370 Kaj se vi komencas visualizar tiu, vi povas pensi pri ĝi 64 00:03:39,370 --> 00:03:42,280 kiel ĉeno de nodoj kiuj estas konektitaj kune. 65 00:03:42,280 --> 00:03:45,070 Ni havas la unua nodo, ĝi enhavas datumon, kaj montrilo 66 00:03:45,070 --> 00:03:49,110 al la dua vertico, kiu enhavas datumoj, kaj montrilo al la tria nodo. 67 00:03:49,110 --> 00:03:52,940 Kaj tiel tio estas kial ni vokas ĝin ligillisto, ili estas ligitaj kune. 68 00:03:52,940 --> 00:03:56,070 >> Kion faras ĉi speciala nodo strukturo aspektas? 69 00:03:56,070 --> 00:04:01,120 Nu, se vi memoras de nia vídeo sur difinanta kutimo tipoj, kun tipo def, 70 00:04:01,120 --> 00:04:05,400 ni povas difini structure-- kaj tajpu difini strukturon kiel tiu. 71 00:04:05,400 --> 00:04:11,240 tyepdef struct sllist, kaj tiam mi uzante la vorto valoro tie arbitre 72 00:04:11,240 --> 00:04:13,891 indiki ajnan datumtipo vere. 73 00:04:13,891 --> 00:04:16,890 Vi povus pasi sur entjero aŭ kaleŝego, vi povus havi kion vi volas. 74 00:04:16,890 --> 00:04:19,389 Ĝi ne estas limigita al nur entjeroj, aŭ io simila. 75 00:04:19,389 --> 00:04:22,790 Do valoro estas nur arbitra datumtipo, kaj tiam puntero 76 00:04:22,790 --> 00:04:26,310 al alia nodo de la sama tipo. 77 00:04:26,310 --> 00:04:29,690 >> Nun, ekzistas iom kaptaĵo tie kun difinanta strukturo 78 00:04:29,690 --> 00:04:33,030 kiam ĝi estas mem referenca strukturo. 79 00:04:33,030 --> 00:04:35,340 Mi devas havi portempa citi por mia strukturo. 80 00:04:35,340 --> 00:04:37,640 Fine de la tago mi klare volas nomi ĝin 81 00:04:37,640 --> 00:04:43,030 SLL nodo, jen finfine la nova citi parton de mia tipo difino, 82 00:04:43,030 --> 00:04:47,450 sed mi ne povas uzi SLL nodo en la mezo de ĉi tiu. 83 00:04:47,450 --> 00:04:51,430 La kialo estaĵo, mi ne kreis tipo nomita SLL nodo 84 00:04:51,430 --> 00:04:55,200 ĝis mi trafis tiun fina punkto tie. 85 00:04:55,200 --> 00:04:59,720 Supren ĝis tiu punkto, mi devas havi alia maniero aludi al tiu datumtipo. 86 00:04:59,720 --> 00:05:02,440 >> Kaj tiu estas mem referenca datumtipo. 87 00:05:02,440 --> 00:05:06,314 Ĝi; s datumtipo de strukturo kiu enhavas datumojn, 88 00:05:06,314 --> 00:05:08,480 kaj puntero al alia strukturo de la sama tipo. 89 00:05:08,480 --> 00:05:11,750 Do mi bezonas por povi rilati al tiu datumtipo almenaŭ temporalmente, 90 00:05:11,750 --> 00:05:14,910 tiel donante provizoran nomo de struct sllist 91 00:05:14,910 --> 00:05:18,540 min permesas tiam diru mi volas montrilon al alia struct sllist, 92 00:05:18,540 --> 00:05:24,690 struct sllist stelo, kaj tiam post mi kompletigis la difinon, 93 00:05:24,690 --> 00:05:27,220 Mi povas nun nomas tiun tipon de SLL nodo. 94 00:05:27,220 --> 00:05:30,520 >> Tial do komprenu ke estas provizora nomo tie, 95 00:05:30,520 --> 00:05:31,879 sed permanenta nomo tie. 96 00:05:31,879 --> 00:05:33,920 Foje vi povus vidi difinoj de strukturo, 97 00:05:33,920 --> 00:05:36,570 ekzemple, kiuj ne memo referenca, ke 98 00:05:36,570 --> 00:05:39,390 ne havas especificación nomo tie. 99 00:05:39,390 --> 00:05:43,040 Estus ĝuste diri typedef struct, malfermi krispa streĉa kaj tiam difini ĝin. 100 00:05:43,040 --> 00:05:45,620 Sed se vi estas struct estas mem referenca, kiel ĉi tiu estas, 101 00:05:45,620 --> 00:05:49,010 vi devas specifi provizora tipo nomo. 102 00:05:49,010 --> 00:05:51,310 Sed finfine, nun ke ni faris tion, 103 00:05:51,310 --> 00:05:53,620 ni povas simple raporti al tiuj nodoj, tiuj unuoj, 104 00:05:53,620 --> 00:05:57,900 kiel SLL nodoj por celoj de la resto de ĉi tiu video. 105 00:05:57,900 --> 00:06:00,900 >> Bone, do ni scias kiel krei ligillisto nodo. 106 00:06:00,900 --> 00:06:03,240 Ni scias kiel difini ligillisto nodo. 107 00:06:03,240 --> 00:06:06,670 Nun, se ni tuj komencos uzante ilin por kolekti informojn, 108 00:06:06,670 --> 00:06:10,360 ekzistas kelkaj operacioj ni bezonas kompreni kaj labori kun. 109 00:06:10,360 --> 00:06:12,860 Ni bezonas scii kiel krei ligillisto el maldika aero. 110 00:06:12,860 --> 00:06:14,901 Se ne estas lerta jam, ni volas komenci. 111 00:06:14,901 --> 00:06:16,960 Do ni devas esti kapabla krei ligillisto, 112 00:06:16,960 --> 00:06:19,130 ni bezonas probable serĉi tra la ligon listo 113 00:06:19,130 --> 00:06:21,830 trovi elementon ni serĉas. 114 00:06:21,830 --> 00:06:24,430 Ni bezonas por povi enŝovi novajn objektojn en la listo, 115 00:06:24,430 --> 00:06:25,930 ni volas nian liston por povi kreski. 116 00:06:25,930 --> 00:06:28,638 Kaj simile, ni volas povi forigi aĵojn de nia listo, 117 00:06:28,638 --> 00:06:30,250 ni volas nian liston por povi ŝrumpi. 118 00:06:30,250 --> 00:06:32,160 Kaj fine de nia programojn, speciale 119 00:06:32,160 --> 00:06:34,550 se vi memoras ke ni estas dinamike asignante memoron 120 00:06:34,550 --> 00:06:38,337 konstrui tiuj listoj tipe, ni volas liberigi ĉiujn ke memoro 121 00:06:38,337 --> 00:06:39,670 kiam ni faris laboranta kun ĝi. 122 00:06:39,670 --> 00:06:44,627 Kaj do ni bezonas por povi forigi tuta ligillisto en unu malsukcesos plonĝo. 123 00:06:44,627 --> 00:06:46,460 Do ni iru tra iuj de ĉi tiuj operacioj 124 00:06:46,460 --> 00:06:51,192 kaj kiel ni povus bildigi ilin, parolante en _pseudocode_ kodo specife. 125 00:06:51,192 --> 00:06:53,150 Do ni volas krei ligillisto, do eble ni 126 00:06:53,150 --> 00:06:56,480 volas difini funkcio kun ĉi tiu prototipo. 127 00:06:56,480 --> 00:07:01,690 SLL nodo stelo, krei, kaj mi pasante en unu argumento, iuj arbitraj datumoj 128 00:07:01,690 --> 00:07:05,530 tajpi denove, de iu arbitra datumtipo. 129 00:07:05,530 --> 00:07:10,482 Sed mi returning-- tiu funkcio devas revenos al mi montrilo, al unuope 130 00:07:10,482 --> 00:07:11,190 ligillisto nodo. 131 00:07:11,190 --> 00:07:14,050 Denove, ni provas krei ligillisto el maldika aero, 132 00:07:14,050 --> 00:07:17,900 do mi bezonas montrilon al tiu listo, kiam mi faris. 133 00:07:17,900 --> 00:07:19,420 >> Do kio estas la paŝoj implikita tie? 134 00:07:19,420 --> 00:07:20,960 Nu, unue mi estas tuj faros estas dinamike 135 00:07:20,960 --> 00:07:22,550 destini spaco por nova nodo. 136 00:07:22,550 --> 00:07:26,689 Denove, ni kreas ĝin el maldika aero, tiel ni devas malloc spaco por tio. 137 00:07:26,689 --> 00:07:28,480 Kaj kompreneble, tuj post ni malloc, 138 00:07:28,480 --> 00:07:31,692 ni ĉiam kontroli por certiĝi ke nia pointer-- ni ne reiri nula. 139 00:07:31,692 --> 00:07:33,650 Ĉar se ni provas kaj cedemo nula puntero, 140 00:07:33,650 --> 00:07:36,190 ni tuj suferos segfault kaj ni ne volas tion. 141 00:07:36,190 --> 00:07:39,510 >> Tiam ni volas plenigi la kampon, ni volas pravalorizi la valoro kampo 142 00:07:39,510 --> 00:07:41,690 kaj pravalorizi la sekva kampo. 143 00:07:41,690 --> 00:07:45,450 Kaj poste ni volas to-- eventuale kiel la funkcio prototipo indicates-- ni volas 144 00:07:45,450 --> 00:07:49,940 reveni puntero al SLL nodo. 145 00:07:49,940 --> 00:07:51,710 Do kio faras ĉi aspekti vide? 146 00:07:51,710 --> 00:07:55,230 Nu, unue ni tuj dinamike destini spaco por nova SLL nodo, 147 00:07:55,230 --> 00:07:58,320 do ni malloc-- tio vida reprezentado 148 00:07:58,320 --> 00:08:00,020 de la nodo ni simple kreitaj. 149 00:08:00,020 --> 00:08:02,757 Kaj ni kontroli por certiĝi ĝi ne null-- tiukaze 150 00:08:02,757 --> 00:08:04,840 la bildo ne havus montris supren, se ĝi estis nula, 151 00:08:04,840 --> 00:08:07,298 ni estus kuri el memoro, do ni estas bonaj iri tien. 152 00:08:07,298 --> 00:08:10,200 Do nun ni estas sur paŝi C, pravalorizi la nodoj valoro kampo. 153 00:08:10,200 --> 00:08:12,280 Nu, bazita sur ĉi tiu funkcio vokas mi uzas tie, 154 00:08:12,280 --> 00:08:16,700 aspektas kiel mi volas pasi en 6, Do mi devos 6 en la valoro kampo. 155 00:08:16,700 --> 00:08:18,865 Nun, pravalorizi la sekva kampo. 156 00:08:18,865 --> 00:08:21,640 Nu, kion mi povos fari tie, nenio estas proksima, dekstra, 157 00:08:21,640 --> 00:08:23,600 ĉi estas la sola afero en la listo. 158 00:08:23,600 --> 00:08:27,206 Do kio estas la sekvanta afero en la listo? 159 00:08:27,206 --> 00:08:29,660 >> Ĝi ne devus celi ion, dekstre. 160 00:08:29,660 --> 00:08:33,600 Ekzistas nenio pli, do kio estas la koncepto ni scias de tio nothing-- 161 00:08:33,600 --> 00:08:35,638 punteros al nenio? 162 00:08:35,638 --> 00:08:37,929 Devus esti eble ni volas meti nula puntero tie, 163 00:08:37,929 --> 00:08:40,178 kaj mi reprezentas la nula Pointer kiel ĝuste ruĝan skatolon, 164 00:08:40,178 --> 00:08:41,559 ni ne povas iri plu. 165 00:08:41,559 --> 00:08:44,430 Kiel ni vidos iom pli poste, ni devos eventuale ĉenoj 166 00:08:44,430 --> 00:08:46,330 de sagoj konektanta tiuj nodoj kune, 167 00:08:46,330 --> 00:08:48,480 sed kiam vi frapis la ruĝa skatolo, jen nula, 168 00:08:48,480 --> 00:08:51,150 ni ne povas iri plu, tio estas la fino de la listo. 169 00:08:51,150 --> 00:08:53,960 >> Kaj laste, ni nur volas reveni puntero al tiu nodo. 170 00:08:53,960 --> 00:08:56,160 Do ni nomas ĝin novan, kaj revenos nova 171 00:08:56,160 --> 00:08:59,370 do ĝi povas esti uzata en ajn funkcio kreis. 172 00:08:59,370 --> 00:09:03,100 Do tie ni iras, Ni kreis unuope ligillisto nodo el maldika aero, 173 00:09:03,100 --> 00:09:05,920 kaj nun ni havas liston ni povas labori kun. 174 00:09:05,920 --> 00:09:08,260 >> Nun, diru ni jam havas grandan ĉenon, 175 00:09:08,260 --> 00:09:09,800 kaj ni volas trovi ion en ĝi. 176 00:09:09,800 --> 00:09:12,716 Kaj ni volas funkcio kiu okazas reveni vera aŭ malvera, depende 177 00:09:12,716 --> 00:09:15,840 sur ĉu valoro ekzistas en tiu listo. 178 00:09:15,840 --> 00:09:18,160 Funkcio prototipo, aŭ deklaro por tiu funkcio, 179 00:09:18,160 --> 00:09:23,320 povus aspekti this-- bool trovi, kaj tiam ni volas pasi en du argumentojn. 180 00:09:23,320 --> 00:09:26,996 >> La unua, estas puntero al la unua elemento de la ligitaj listo. 181 00:09:26,996 --> 00:09:29,620 Tiu estas efektive io vin timige Ĉiam volas konservi trako de, 182 00:09:29,620 --> 00:09:33,110 kaj fakte povus esti iu kiu vi eĉ metis en tutmonda variablo. 183 00:09:33,110 --> 00:09:35,360 Unufoje vi krei liston, vi ĉiam, ĉiam 184 00:09:35,360 --> 00:09:38,990 volas konservi trako de la tre unua elemento de la listo. 185 00:09:38,990 --> 00:09:43,690 KE vojo vi povas referi al ĉiuj aliaj elementoj per ĝuste sekvante la ĉeno, 186 00:09:43,690 --> 00:09:47,300 sen devi teni punteros nerompita por ĉiu ununura ero. 187 00:09:47,300 --> 00:09:50,920 Vi nur bezonas konservi trakon de la unua unu se ili ĉiuj ĉenitaj kune. 188 00:09:50,920 --> 00:09:52,460 >> Kaj tiam la dua afero ni pasante en denove 189 00:09:52,460 --> 00:09:54,376 estas arbitre some-- ajn datumtipo ni estas 190 00:09:54,376 --> 00:09:59,640 serĉanta ekzistas ene de espereble unu el la nodoj en la listo. 191 00:09:59,640 --> 00:10:00,980 Do kio estas la paŝoj? 192 00:10:00,980 --> 00:10:04,250 Nu, la unua aĵo kiun ni faras estas ni krei transversaj montrilon 193 00:10:04,250 --> 00:10:06,015 indikante la lertaj kapo. 194 00:10:06,015 --> 00:10:08,890 Nu, kial ni faru tion, ni jam havas puntero en la lertaj kapon, 195 00:10:08,890 --> 00:10:10,974 kial ni ne simple proponas ke oni ĉirkaŭe? 196 00:10:10,974 --> 00:10:13,140 Nu, kiel mi ĵus diris, ĝi estas vere grava por ni 197 00:10:13,140 --> 00:10:17,580 ĉiam sekvigi la tre unua elemento en la listo. 198 00:10:17,580 --> 00:10:21,270 Kaj tiel ĝi estas fakte pli bona krei duplikaton de tio, 199 00:10:21,270 --> 00:10:25,350 kaj uzi tiun moviĝi ĉirkaŭ tiel ni neniam hazarde malproksimigi, aŭ ni ĉiam 200 00:10:25,350 --> 00:10:30,430 havas puntero en iu punkto kiu estas ĝuste sur la unua elemento de la listo. 201 00:10:30,430 --> 00:10:33,290 Do estas pli bone krei dua kiu ni uzas por deloki. 202 00:10:33,290 --> 00:10:35,877 >> Tiam ni simple kompari ĉu la valoro kampo ĉe tiu nodo 203 00:10:35,877 --> 00:10:38,960 kion ni serĉas, kaj se ĝi estas Ne, ni simple movi al la sekva nodo. 204 00:10:38,960 --> 00:10:41,040 Kaj ni tenas faranta tion super kaj super kaj super, 205 00:10:41,040 --> 00:10:44,811 ĝis ni ĉu trovi la elemento, aŭ ni trafis 206 00:10:44,811 --> 00:10:47,310 null-- ni atingis la finon de la listo kaj ĝi ne estas tie. 207 00:10:47,310 --> 00:10:50,540 Tio devus espereble sonorigi sonorilo al vi, kiel lineara serĉo, 208 00:10:50,540 --> 00:10:54,430 ni nur repliki ĝin en oni unuope ligillisto strukturo 209 00:10:54,430 --> 00:10:56,280 anstataŭ uzi tabelo por fari ĝin. 210 00:10:56,280 --> 00:10:58,210 >> Do jen ekzemplo de oni unuope ligita listo. 211 00:10:58,210 --> 00:11:00,043 Ĉi tiu konsistas kvin nodoj, kaj ni havas 212 00:11:00,043 --> 00:11:04,330 sagon al la kapo de la listo, kiu nomigxas listo. 213 00:11:04,330 --> 00:11:07,385 La unua afero ni volas fari estas denove, krei ke trairado montrilo. 214 00:11:07,385 --> 00:11:09,760 Do ni havas nun du punteros tiu punkto ĝis la sama afero. 215 00:11:09,760 --> 00:11:15,025 >> Nun, rimarki tie ankaŭ, mi ne havas malloc neniun spacon trav. 216 00:11:15,025 --> 00:11:18,970 Mi ne diris trav egalas malloc io, ke nodo jam ekzistas, 217 00:11:18,970 --> 00:11:21,160 ke spaco en memoro jam ekzistas. 218 00:11:21,160 --> 00:11:24,290 Tiamaniere mi fakte faras estas krei alian puntero al ĝi. 219 00:11:24,290 --> 00:11:28,210 Mi ne mallocing plia spaco, nur havas nun du punteros 220 00:11:28,210 --> 00:11:31,370 montrante la saman aferon. 221 00:11:31,370 --> 00:11:33,710 >> Do estas 2 kion mi serĉas? 222 00:11:33,710 --> 00:11:37,220 Nu, ne, tiel anstataŭe mi estas tuj movi al la venonta unu. 223 00:11:37,220 --> 00:11:41,740 Do resume mi dirus, trav egalas trav sekva. 224 00:11:41,740 --> 00:11:43,630 Ĉu 3 kion mi serĉas, ne. 225 00:11:43,630 --> 00:11:45,780 Do mi daŭrigas iri tra, ĝis fine 226 00:11:45,780 --> 00:11:48,690 atingos 6 kiu estas kion Mi serĉas cxar bazita sur la funkcia alvoko 227 00:11:48,690 --> 00:11:51,600 Mi havas ĉe la supro tie kaj do mi faris. 228 00:11:51,600 --> 00:11:54,150 >> Nun, kio se la elemento mi serĉas ne estas en la listo, 229 00:11:54,150 --> 00:11:55,510 estas ankoraŭ iranta labori? 230 00:11:55,510 --> 00:11:57,120 Nu, rimarki ke la listo tie estas subtile malsama, 231 00:11:57,120 --> 00:11:59,410 kaj ĉi tio estas alia afero, ke estas grava kun ligitaj listoj, 232 00:11:59,410 --> 00:12:01,780 vi ne devas konservi ilin en ajna aparta ordo. 233 00:12:01,780 --> 00:12:05,390 Vi povas se vi volas, sed Vi eble jam rimarkis 234 00:12:05,390 --> 00:12:09,310 ke ni ne konservanta trako de kiu nombro elemento ni estas ĉe. 235 00:12:09,310 --> 00:12:13,150 >> Kaj tio estas speco de unu komerco kiu ni havi kun ligillisto versoj arrays, 236 00:12:13,150 --> 00:12:15,300 Estas tio ni ne havas hazarda aliro anymore. 237 00:12:15,300 --> 00:12:18,150 Ni ne povas simple diri, mi volas iri al la 0th elemento, 238 00:12:18,150 --> 00:12:21,410 aŭ la 6a elemento de mia tabelo, kion mi povas fari en tabelo. 239 00:12:21,410 --> 00:12:25,080 Mi ne povas diri mi volas iri al la 0th elemento, aŭ la 6-a elemento, 240 00:12:25,080 --> 00:12:30,360 aŭ la 25a ero de mia ligillisto, ekzistas neniu indekso asociita kun ili. 241 00:12:30,360 --> 00:12:33,660 Kaj tiel ĝi ne vere gravas Se ni konservas nian liston en ordo. 242 00:12:33,660 --> 00:12:36,080 Se vi volas vi certe povas, sed ekzistas 243 00:12:36,080 --> 00:12:38,567 ne tial ili bezonas konserviĝi en iu ajn ordo. 244 00:12:38,567 --> 00:12:40,400 Do denove, ni provu kaj trovi 6 en tiu listo. 245 00:12:40,400 --> 00:12:43,200 Nu, ni starti je la komencante, ni ne trovas 6 246 00:12:43,200 --> 00:12:47,690 kaj poste ni daŭre ne trovante 6, ĝis ni finfine atingos tie. 247 00:12:47,690 --> 00:12:52,790 Do ĝuste nun trav punktoj al la nodo enhavanta 8 kaj ses ne estas en tie. 248 00:12:52,790 --> 00:12:55,250 >> Do la sekva paŝo estus iri al la sekvanta puntero, 249 00:12:55,250 --> 00:12:57,440 tiel diru trav egalas trav sekva. 250 00:12:57,440 --> 00:13:00,750 Nu, trav sekva, indikita per la ruĝa skatolo tie, estas nula. 251 00:13:00,750 --> 00:13:03,020 Do ekzistas nenie alie al iru, do ĉe tiu punkto 252 00:13:03,020 --> 00:13:06,120 Ni povas konkludi ke ni atingis la fino de la ligillisto, 253 00:13:06,120 --> 00:13:07,190 kaj 6 ne estas en tie. 254 00:13:07,190 --> 00:13:10,980 Kaj estus revenis malvera en ĉi tiu kazo. 255 00:13:10,980 --> 00:13:14,540 >> OK, kiel ni enŝovu nova nodo en la ligitaj listo? 256 00:13:14,540 --> 00:13:17,310 Do ni povis krei ligillisto el nenie, 257 00:13:17,310 --> 00:13:19,370 sed ni probable volas konstrui ĉenon kaj ne 258 00:13:19,370 --> 00:13:22,620 krei aron de apartaj listoj. 259 00:13:22,620 --> 00:13:25,700 Ni volas havi unu liston ke havas aron da nodoj en ĝi, 260 00:13:25,700 --> 00:13:28,040 Ne faskon da listoj kun ununura nodo. 261 00:13:28,040 --> 00:13:31,260 Do ni ne povas simple observu uzante la Create funkcio ni difinis pli frue, nun ni 262 00:13:31,260 --> 00:13:33,860 volas enmeti enen lerta kiu jam ekzistas. 263 00:13:33,860 --> 00:13:36,499 >> Do tiu kazo, ni tuj Iam en du argumentoj, 264 00:13:36,499 --> 00:13:39,290 la puntero al la estro de tiu ligillisto ke ni volas aldoni. 265 00:13:39,290 --> 00:13:40,910 Denove, tio estas kial ĝi estas tiel Gravas ke ni ĉiam 266 00:13:40,910 --> 00:13:43,400 sekvigi ĝin, ĉar ĝi estas la nura maniero ni vere 267 00:13:43,400 --> 00:13:46,690 devas rilati al la tuta listo estas nur montrilo al la unua elemento. 268 00:13:46,690 --> 00:13:49,360 Do ni volas pasi en montrilon al tiu unua elemento, 269 00:13:49,360 --> 00:13:52,226 kaj kion ajn valoron ni volas aldoni al la listo. 270 00:13:52,226 --> 00:13:54,600 Kaj fine ĉi tiu funkcio tuj revenos montrilo 271 00:13:54,600 --> 00:13:57,980 al la nova estro de ligitaj listo. 272 00:13:57,980 --> 00:13:59,700 >> Kiuj estas la paŝoj implikita tie? 273 00:13:59,700 --> 00:14:02,249 Nu, simile kun krei, ni bezonas dinamike asigni 274 00:14:02,249 --> 00:14:05,540 spaco por nova nodo, kaj kontrolu fari Ni ja ne elĉerpas de memoro, denove, 275 00:14:05,540 --> 00:14:07,150 ĉar ni uzas malloc. 276 00:14:07,150 --> 00:14:09,080 Tiam ni volas popoli kaj enmeti la nodo, 277 00:14:09,080 --> 00:14:12,730 tiel metis la numeron ajn val estas, en la nodo. 278 00:14:12,730 --> 00:14:17,310 Ni volas enmeti la nodo ĉe la komenco de la ligitaj listo. 279 00:14:17,310 --> 00:14:19,619 >> Tie estas kialo ke mi volas fari tion, kaj ĝi 280 00:14:19,619 --> 00:14:21,910 eble valorus prenante duan paŭzi la video ĉi tie, 281 00:14:21,910 --> 00:14:25,860 kaj pensas kial mi volus enmeti komence de ligitaj 282 00:14:25,860 --> 00:14:26,589 lerta. 283 00:14:26,589 --> 00:14:28,630 Denove, mi menciis antaŭe ke ĝi ne vere 284 00:14:28,630 --> 00:14:33,020 gravas se ni konservu ĝin en ajna ordo, do eble tio estas postsigno. 285 00:14:33,020 --> 00:14:36,040 Kaj vi vidis kion okazus se ni volis to-- aŭ el nur dua 286 00:14:36,040 --> 00:14:37,360 antaŭe kiam ni iris tra serĉo vin 287 00:14:37,360 --> 00:14:39,235 povis vidi kio povus okazi se ni provis 288 00:14:39,235 --> 00:14:41,330 enmeti fine de la listo. 289 00:14:41,330 --> 00:14:44,750 Ĉar ni ne havas sagon al la fino de la listo. 290 00:14:44,750 --> 00:14:47,490 >> Do la kialo ke mi volas enmeti komence, 291 00:14:47,490 --> 00:14:49,380 Estas ĉar mi povas fari ĝin tuj. 292 00:14:49,380 --> 00:14:52,730 Mi havas puntero komence, kaj ni vidas tion en vida en sekundo. 293 00:14:52,730 --> 00:14:55,605 Sed se mi volas enmeti fine, Mi devas komenci ĉe la komenco, 294 00:14:55,605 --> 00:14:58,760 _traverse_ tutan vojon al la fino, kaj tiam najlu gxin plu. 295 00:14:58,760 --> 00:15:01,420 Do tio signifus ke enmeto fine de la listo 296 00:15:01,420 --> 00:15:04,140 igus o de n operacio, revenanta 297 00:15:04,140 --> 00:15:06,720 al nia diskuto de komputa komplekseco. 298 00:15:06,720 --> 00:15:10,140 Estus fariĝis o de n operacio, kie kiel la listo atingis pli grandan, kaj pli granda, 299 00:15:10,140 --> 00:15:13,310 kaj pli granda, ĝi fariĝos pli kaj pli malfacile najlu ion 300 00:15:13,310 --> 00:15:14,661 sur fine. 301 00:15:14,661 --> 00:15:17,410 Sed estas ĉiam vere facila najlu ion sur komence, 302 00:15:17,410 --> 00:15:19,060 vi estas ĉiam komence. 303 00:15:19,060 --> 00:15:21,620 >> Kaj ni vidos vida de ĉi denove. 304 00:15:21,620 --> 00:15:24,100 Kaj poste iam ni faris, fojo ni insertos la nova nodo, 305 00:15:24,100 --> 00:15:26,880 ni volas reveni al niaj montrilon la nova kapo de ligitaj listo, kiu 306 00:15:26,880 --> 00:15:29,213 ekde ni enmeto en la komencante, fakte estos 307 00:15:29,213 --> 00:15:31,060 sagon al la nodo ni simple kreitaj. 308 00:15:31,060 --> 00:15:33,280 Ni bildigi tion, ĉar mi pensas ĝi helpos. 309 00:15:33,280 --> 00:15:36,661 >> Do jen nia listo, ĝi konsistas el kvar elementoj, nodo enhavanta 15, 310 00:15:36,661 --> 00:15:38,410 kiu notas al nodo enhavanta 9, kiu 311 00:15:38,410 --> 00:15:41,370 notas al nodo enhavanta 13, kiu notas al nodo enhavanta 312 00:15:41,370 --> 00:15:44,840 10, kiu havas la nulan montrilo kiel lia sekva puntero 313 00:15:44,840 --> 00:15:47,010 Do jen la fino de la listo. 314 00:15:47,010 --> 00:15:50,200 Do ni volas enmeti nova nodo kun la valoro 12 315 00:15:50,200 --> 00:15:52,720 komence de tiu ĉi listo, kion ni faru? 316 00:15:52,720 --> 00:15:58,770 Nu, unue ni malloc spaco por la nodo, kaj tiam ni metis 12 en tie. 317 00:15:58,770 --> 00:16:02,211 >> Do nun ni atingis decido punkto, dekstra? 318 00:16:02,211 --> 00:16:03,960 Ni havas kelkajn punteros kiu ni povis 319 00:16:03,960 --> 00:16:06,770 movi, kiun oni devus nin movi unue? 320 00:16:06,770 --> 00:16:09,250 Ĉu ni faru 12 punkto la nova kapo de la list-- 321 00:16:09,250 --> 00:16:13,020 aŭ pardonu, devus nin fari 12 fingromontras la malnova kapo de la listo? 322 00:16:13,020 --> 00:16:15,319 Sed se ni diros, ke la listo nun komencas ĉe 12. 323 00:16:15,319 --> 00:16:17,110 Ekzistas distingo tie kaj ni esploros 324 00:16:17,110 --> 00:16:19,870 ĉe kio okazas kun ambaŭ en sekundo. 325 00:16:19,870 --> 00:16:23,350 >> Sed tio kondukas al grandan temon por sidebar, 326 00:16:23,350 --> 00:16:26,280 kiu estas tiu de la trickiest aferoj kun ligitaj listoj 327 00:16:26,280 --> 00:16:30,980 estas aranĝi la montriloj en la ĝusta ordo. 328 00:16:30,980 --> 00:16:34,520 Se vi movas aferoj misfunkcias, vi povas fini hazarde 329 00:16:34,520 --> 00:16:36,050 orphaning la resto de la listo. 330 00:16:36,050 --> 00:16:37,300 Kaj jen ekzemplo de tio. 331 00:16:37,300 --> 00:16:40,540 Do ni iru kun la ideo of-- bone, ni ĵus kreita 12. 332 00:16:40,540 --> 00:16:43,180 Ni scias 12 tuj estos la nova kapo de la listo, 333 00:16:43,180 --> 00:16:47,660 kaj do kial ni ne simple movi la listo puntero atentigi tie. 334 00:16:47,660 --> 00:16:49,070 >> Bone, do tio estas bona. 335 00:16:49,070 --> 00:16:51,560 Do nun kie faras 12 sekva punkto? 336 00:16:51,560 --> 00:16:54,580 Mi volas diri, vide povas vidi ke indikos al 15, 337 00:16:54,580 --> 00:16:57,250 kiel homoj estas vere evidenta al ni. 338 00:16:57,250 --> 00:17:00,300 Kiel la komputila scias? 339 00:17:00,300 --> 00:17:02,720 Ni ne havas ion indikante 15 plu, bone? 340 00:17:02,720 --> 00:17:05,869 >> Ni perdis ajnan kapablon rilati al 15. 341 00:17:05,869 --> 00:17:11,460 Ni ne povas diri novaj sago sekva egaluloj io, nenio estas tie. 342 00:17:11,460 --> 00:17:13,510 Fakte, ni orfinoj la resto de la listo 343 00:17:13,510 --> 00:17:16,465 farante tiel, ni hazarde rompis la ĉenon. 344 00:17:16,465 --> 00:17:18,089 Kaj ni certe ne volas fari tion. 345 00:17:18,089 --> 00:17:20,000 >> Do ni iru reen kaj provi tion denove. 346 00:17:20,000 --> 00:17:24,060 Eble la ĝusta por fari estas fiksi 12 La sekva puntero 347 00:17:24,060 --> 00:17:28,290 al la malnova kapo de la listo unue tiam ni povas movi la liston super. 348 00:17:28,290 --> 00:17:30,420 Kaj fakte, tio estas la ĝusta ordo ke ni 349 00:17:30,420 --> 00:17:32,836 bezonas sekvi kiam ni estas laborante kun unuope ligita listo. 350 00:17:32,836 --> 00:17:36,460 Ni ĉiam volas konekti la nova elemento en la listo, 351 00:17:36,460 --> 00:17:41,010 antaŭ ni preni tian grava paŝo de ŝanĝanta 352 00:17:41,010 --> 00:17:43,360 kie la kapo de la ligitaj listo estas. 353 00:17:43,360 --> 00:17:46,740 Denove, tio estas tia fundamenta afero, ni ne volas perdi trakon de ĝi. 354 00:17:46,740 --> 00:17:49,310 >> Do ni volas certigi, ke ĉio estas ĉenitaj kune, 355 00:17:49,310 --> 00:17:52,040 antaŭ ni movas tiu puntero. 356 00:17:52,040 --> 00:17:55,300 Kaj tiel ĉi tio estus la ĝusta ordo, kiu estas konekti 12 al la listo, 357 00:17:55,300 --> 00:17:57,630 tiam diru, ke la listo komenciĝas 12. 358 00:17:57,630 --> 00:18:00,860 Se ni diris la listo komenciĝas ĉe 12 kaj tiam provis konekti 12 al la listo, 359 00:18:00,860 --> 00:18:02,193 Ni jam vidis kio okazas. 360 00:18:02,193 --> 00:18:04,920 Ni perdos la listo erare. 361 00:18:04,920 --> 00:18:06,740 >> Bone, do unu pli da afero paroli. 362 00:18:06,740 --> 00:18:09,750 Kio se ni volas forigi tutan ligillisto tuj? 363 00:18:09,750 --> 00:18:11,750 Denove, ni mallocing ĉiuj tiu spaco, kaj tiel ni 364 00:18:11,750 --> 00:18:13,351 bezonas liberigi ŝin kiam ni faris. 365 00:18:13,351 --> 00:18:15,350 Do nun ni volas forigi la tutan ligillisto. 366 00:18:15,350 --> 00:18:16,850 Nu, kion ni volas fari? 367 00:18:16,850 --> 00:18:20,460 >> Se ni atingis la nula puntero, ni volas ĉesigi, alie, nur forigi 368 00:18:20,460 --> 00:18:23,420 la resto de la listo kaj poste liberigi min. 369 00:18:23,420 --> 00:18:28,890 Forigi la resto de la listo, kaj tiam liberigi la nuna nodo. 370 00:18:28,890 --> 00:18:32,850 Kion signifas tiu sono kiel, kio tekniko ni parolis 371 00:18:32,850 --> 00:18:35,440 pri antaŭe faras tiun sonon kiel? 372 00:18:35,440 --> 00:18:39,560 Forigi ĉiuj aliaj, tiam revenu kaj forigi min. 373 00:18:39,560 --> 00:18:42,380 >> Tio rekursio, ni faris la problemo iomete pli malgranda, 374 00:18:42,380 --> 00:18:46,910 ni dirante forviŝi ĉiuj alia, tiam vi povas forigi min. 375 00:18:46,910 --> 00:18:50,940 Kaj cetere malsupren la vojo, ke nodo diros, forigi ĉiuj aliaj. 376 00:18:50,940 --> 00:18:53,940 Sed fine ni atingos la punkto kie la listo estas nula, 377 00:18:53,940 --> 00:18:55,310 kaj jen nia bazo kazo. 378 00:18:55,310 --> 00:18:57,010 >> Do ni rigardu ĉi, kaj kiel ĉi povus labori. 379 00:18:57,010 --> 00:18:59,759 Do jen nia listo, ĝi estas la sama listo ni ĵus parolis, 380 00:18:59,759 --> 00:19:00,980 kaj jen la paŝoj. 381 00:19:00,980 --> 00:19:04,200 Ekzistas multe de teksto ĉi tie, sed espereble la videbligo helpos. 382 00:19:04,200 --> 00:19:08,557 >> Do ni have-- kaj mi ankaŭ tiris ĝis nia stako kadroj ilustraĵo 383 00:19:08,557 --> 00:19:10,890 de nia vídeo sur alvoko stakoj, Kaj espereble ĉio ĉi 384 00:19:10,890 --> 00:19:13,260 kune montros vin kio okazas. 385 00:19:13,260 --> 00:19:14,510 Do jen nia _pseudocode_ kodon. 386 00:19:14,510 --> 00:19:17,830 Se ni atingas nula montrilon, ĉesu, alie, 387 00:19:17,830 --> 00:19:21,320 forigi la reston de la listo, tiam liberigi la nuna nodo. 388 00:19:21,320 --> 00:19:25,700 Do nun, list-- la puntero kiu ni estas 389 00:19:25,700 --> 00:19:28,410 pasante por pereigi poentoj al 12. 390 00:19:28,410 --> 00:19:33,340 12 estas ne nula puntero, tial ni estas tuj forigi la reston de la listo. 391 00:19:33,340 --> 00:19:35,450 >> Kio viŝante la ni aliaj implikitaj? 392 00:19:35,450 --> 00:19:37,950 Nu, ĝi signifas fari voki detrui, dirante 393 00:19:37,950 --> 00:19:42,060 ke 15 estas la komenco de la resto de la listo ni volas detrui. 394 00:19:42,060 --> 00:19:47,480 Kaj tiel la alvoko detrui 12 afablas sur tene. 395 00:19:47,480 --> 00:19:52,690 Ĝi estas frostigita tie, atendante la voki detrui 15, por fini lian laboron. 396 00:19:52,690 --> 00:19:56,280 >> Nu, 15 estas ne nula puntero, kaj tiel estas tuj diri, bone, 397 00:19:56,280 --> 00:19:58,450 bone, forigi la reston de la listo. 398 00:19:58,450 --> 00:20:00,760 La resto de la listo komenciĝas ĉe 9, kaj tiel ni simple 399 00:20:00,760 --> 00:20:04,514 atendu ĝis vi forigi ĉiu tio ŝtofo, poste revenu kaj forigi min. 400 00:20:04,514 --> 00:20:06,680 Nu 9 tuj diri, nu, Mi ne estas nula puntero, 401 00:20:06,680 --> 00:20:09,020 do forigi la reston la lerta de ĉi tie. 402 00:20:09,020 --> 00:20:11,805 Kaj tiel provi kaj detrui 13. 403 00:20:11,805 --> 00:20:15,550 13 diras, mi ne estas nula puntero, samon, pasas la dolaron. 404 00:20:15,550 --> 00:20:17,930 10 estas ne nula puntero, 10 enhavas nula puntero, 405 00:20:17,930 --> 00:20:20,200 sed 10 ne estas mem nula puntero nun, 406 00:20:20,200 --> 00:20:22,470 kaj tiel pasas la dolaron tro. 407 00:20:22,470 --> 00:20:25,560 >> Kaj nun listo punktoj tie, vere notus al some-- 408 00:20:25,560 --> 00:20:28,710 se mi havus pli spaco en la bildo, ĝi notus al iu hazarda spaco 409 00:20:28,710 --> 00:20:29,960 ke ni ne scias, kio ĝi estas. 410 00:20:29,960 --> 00:20:34,680 Ĝi estas la nula puntero kvankam, la listo Estas laŭvorte nun starigis estas valoroj nula. 411 00:20:34,680 --> 00:20:36,820 Ĝi estas indikante tute interne tiu ruĝa skatolo. 412 00:20:36,820 --> 00:20:39,960 Ni atingis nula puntero, do ni povas halti, kaj ni faris. 413 00:20:39,960 --> 00:20:46,230 >> Kaj por ke purpura kadro estas now-- ĉe la supro de stack-- jen la aktiva kadro, 414 00:20:46,230 --> 00:20:47,017 sed ĝi estas farita. 415 00:20:47,017 --> 00:20:48,600 Se ni atingis nula puntero, ĉesi. 416 00:20:48,600 --> 00:20:51,290 Ni ne faru ion ajn, ni ne povas liberigi nula puntero, 417 00:20:51,290 --> 00:20:55,070 ni ne malloc ajnan spaco, kaj tiel ni faris. 418 00:20:55,070 --> 00:20:57,590 Por ke funkcio kadro estas detruita, kaj ni 419 00:20:57,590 --> 00:21:00,930 resume-- ni reprenos kie ni maldekstre for kun la venonta plej alta unu, kiu 420 00:21:00,930 --> 00:21:02,807 Estas ĉi malhelblua kadro tie. 421 00:21:02,807 --> 00:21:04,390 Do ni repreni ĝuste kie ni cxesis. 422 00:21:04,390 --> 00:21:06,598 Ni viŝis la cetera listo jam, do nun ni estas 423 00:21:06,598 --> 00:21:08,000 tuj liberigi la nuna nodoj. 424 00:21:08,000 --> 00:21:12,920 Do nun ni povas liberigi tiun nodon, kaj nun ni atingis la finon de la funkcio. 425 00:21:12,920 --> 00:21:16,810 Kaj por ke funkcio kadro estas detruitaj, kaj ni reprenos en la lumo blua. 426 00:21:16,810 --> 00:21:20,650 >> Do says-- Mi jam done-- viŝante la resto de la listo, tiel 427 00:21:20,650 --> 00:21:23,140 liberigi la nuna nodo. 428 00:21:23,140 --> 00:21:26,520 Kaj nun la flava kadro estas reen sur pinto de la stako. 429 00:21:26,520 --> 00:21:29,655 Do kiel vi vidas, ni estas nun detruante la listo de dekstre maldekstren. 430 00:21:29,655 --> 00:21:33,710 431 00:21:33,710 --> 00:21:37,280 >> Kio okazus, se, se ni agis aferoj misfunkcias? 432 00:21:37,280 --> 00:21:39,410 Ĝuste kiel kiam ni provis aldoni elementon. 433 00:21:39,410 --> 00:21:41,909 Se ni paneas la ĉenon, se ni ne konektis la montriloj 434 00:21:41,909 --> 00:21:44,690 en la ĝusta ordo, se ni nur liberigis la unuan elementon, 435 00:21:44,690 --> 00:21:47,420 se ni ĵus liberigis la kapo de la listo, nun ni 436 00:21:47,420 --> 00:21:49,642 neniel povus rilati al la resto de la listo. 437 00:21:49,642 --> 00:21:51,350 Kaj do ni havus orfinoj ĉio, 438 00:21:51,350 --> 00:21:53,880 ni devintus kio estas nomita memoro liko. 439 00:21:53,880 --> 00:21:56,800 Se vi memoras de niaj filmetoj sur dinamika memoro atribuo, 440 00:21:56,800 --> 00:21:58,650 Tio ne estas tre bona afero. 441 00:21:58,650 --> 00:22:00,810 >> Do kiel mi diris, Estas pluraj operacioj 442 00:22:00,810 --> 00:22:04,010 ke ni devas uzi labori kun ligillisto efike. 443 00:22:04,010 --> 00:22:08,430 Kaj vi eble rimarkis mi preterlasis unu, viŝante sola elemento de kunligita 444 00:22:08,430 --> 00:22:09,064 lerta. 445 00:22:09,064 --> 00:22:10,980 La kialo mi faradis estas ĝi estas fakte speco de 446 00:22:10,980 --> 00:22:14,360 malfacila pensi pri kiel forigi sola elemento el unuope 447 00:22:14,360 --> 00:22:15,600 ligillisto. 448 00:22:15,600 --> 00:22:19,950 Ni bezonas por povi salti super ion en la listo, kiun 449 00:22:19,950 --> 00:22:22,975 Do oni akiras al point-- ni volas forviŝi ĉi node-- 450 00:22:22,975 --> 00:22:25,350 sed por fari ĝin tiel ni ne perdas ajnan informon, 451 00:22:25,350 --> 00:22:30,530 ni bezonas konekti tiun nodo super tie, ĉi tie. 452 00:22:30,530 --> 00:22:33,390 >> Do mi probable faris ke erara de vida perspektivo. 453 00:22:33,390 --> 00:22:36,830 Do ni estas ĉe la komenco de nia listo, ni antaŭeniru tra, 454 00:22:36,830 --> 00:22:40,510 ni volas forigi ĉi tiun nodon. 455 00:22:40,510 --> 00:22:43,440 Se ni simple forigi ĝin, ni rompis la ĉenon. 456 00:22:43,440 --> 00:22:45,950 Tiu nodo ĝuste ĉi tie rilatas al ĉio alia, 457 00:22:45,950 --> 00:22:48,260 ĝi enhavas la ĉeno de ĉi tie sur eksteren. 458 00:22:48,260 --> 00:22:51,190 >> Do kion ni devas fari reale post ni atingos tiun punkton, 459 00:22:51,190 --> 00:22:56,670 Estas ni bezonos retropaŝi, kaj konekti tiu nodo super al ĉi tiu nodo, 460 00:22:56,670 --> 00:22:58,590 do ni tiam povas forviŝi unu en la mezo. 461 00:22:58,590 --> 00:23:02,120 Sed unuope ligitaj listoj ne havigi al ni kiudirekten iri malantaŭen. 462 00:23:02,120 --> 00:23:05,160 Do ni bezonas ĉu konservi du punteros, kaj movas ilin 463 00:23:05,160 --> 00:23:09,527 speco de off paŝo, unu malantaŭ la aliajn kiel ni iru, aŭ atingi punkton 464 00:23:09,527 --> 00:23:11,110 kaj poste sendi alian montrilon tra. 465 00:23:11,110 --> 00:23:13,150 Kaj kiel vi povas vidi, ĝi povas akiri iom senorda. 466 00:23:13,150 --> 00:23:15,360 Feliĉe, ni havas alia maniero solvi tion, 467 00:23:15,360 --> 00:23:17,810 kiam ni parolas pri duoble ligitaj listoj. 468 00:23:17,810 --> 00:23:20,720 >> Mi Doug Lloyd, tiu estas CS50. 469 00:23:20,720 --> 00:23:22,298