2017-02-10 7 views
0

Так что мне нужно заполнить свой Связанный список с именем Candidate, с номерами 1000-9999. Я знаю, как это сделать для массивов с петлей, я предполагаю, что это похоже здесь.Заполнение связанного списка с номерами 1000-9999

У меня есть метод setter, называемый setInfo, и задайте метод ссылок, сделанный в классе узлов, они здесь.

public void setInfo(int info){ //Info Setter 
     this.info = info; 
    } 
public void setLink(LLIntegerNode link){ //Link setter 
     this.link = link; 
    } 

Моя попытка здесь

LLIntegerNode candidate; //Node class and Linked List named candidate 
for(int j =9999; j >=1000; j--){ 
LLIntegerNode canNode = new LLIntegerNode(j, null); //new node 
      candidate.setInfo(canNode); 
     } 

Что-то не так, мне нужно, чтобы установить все номера, чтобы заселить в этот новый узел, но я не знаю, как сделать это правильно ...

я получаю сообщение об ошибке при SetInfo, и это говорит the method setInfo(int) in the type LLIntegerNode is not applicable for the arguments (LLIntegerNode)

вот мой LLIntegerNode класс

public class LLIntegerNode{ 

    private int info; // info inside node 
    private LLIntegerNode link; //create a link for nodes 

    public LLIntegerNode(int info, LLIntegerNode link){ //Constructor 
     this.info = info; 
     this.link = link; 
    } 

    public void setInfo(int info){ //Info Setter 
     this.info = info; 
    } 

    public int getInfo(){ //Info Getter 
     return info; 
    } 

    public void setLink(LLIntegerNode link){ //Link setter 
     this.link = link; 
    } 

    public LLIntegerNode getLink(){ //Link getter 
     return link; 
    } 
} 
+0

Пожалуйста, добавьте определение класса 'LLIntegerNode' в свой вопрос. –

ответ

0

Следующий фрагмент кода не будет работать:

LLIntegerNode candidate; //Node class and Linked List named candidate 
for(int j =9999; j >=1000; j--){ 
LLIntegerNode canNode = new LLIntegerNode(j, null); //new node 
    candidate.setInfo(canNode); 
} 

Есть две причины

  • candidate не инициализирован
  • Даже если он инициализируется, for цикл будет держать на перезапись ценности.

То, что вы действительно хотите следующий (если я правильно понял вопрос правильно):

LLIntegerNode candidate = new LLIntegerNode(); 
for(int j =9999; j >=1000; j--){ 
    LLIntegerNode element = new LLIntegerNode(j, null); //new node 
    candidate.setLink(element); 
    candidate = element; 
} 

Это добавит узлы в список.

+0

Возможно, это сработает, но я не могу использовать класс LinkedList util. Поэтому я не могу использовать add – maxbr7t

+0

Я обновил свой ответ, попробуйте сейчас? –

+0

ладно, теперь я немного смущен тем, что делать с моим связанным списком, который я использовал. «кандидат», как я могу убедиться, что все узлы ссылаются на это? – maxbr7t

0

Ваш метод принимает int, поэтому передайте вместо него значение для j.

public void setInfo(int info) { // Info Setter 
    this.info = info; 
} 
candidate.setInfo(j); 

ошибка говорит вам, что вы передаете LLIntegerNode в метод, который только принимает int.

метод SetInfo (INT) в типе LLIntegerNode не применяется для аргументов (LLIntegerNode)


Вы можете добавить этот toString() метод к классу LLIntegerNode

@Override 
public String toString() { 
    return String.format("%s -> %d", link, info); 
} 

И просто выполните следующий класс.

public class LLIntegerNodeDriver { 
    public static void main(String[] args) { 
     int start = 1000; 
     int end = 2000; 
     LLIntegerNode head = null; 

     for (int info = end - 1; info >= start; info--) { 
      head = new LLIntegerNode(info, head); 
     } 

     System.out.println(head); 
    } 
} 

Это будет печатать:

null -> 1999 -> 1998 -> 1997 -> 1996 -> 1995 -> 1994 -> 1993 -> 1992 -> 1991 -> 1990 -> 1989 -> 1988 -> 1987 -> 1986 -> 1985 -> 1984 -> 1983 -> 1982 -> 1981 -> 1980 -> 1979 -> 1978 -> 1977 -> 1976 -> 1975 -> 1974 -> 1973 -> 1972 -> 1971 -> 1970 -> 1969 -> 1968 -> 1967 -> 1966 -> 1965 -> 1964 -> 1963 -> 1962 -> 1961 -> 1960 -> 1959 -> 1958 -> 1957 -> 1956 -> 1955 -> 1954 -> 1953 -> 1952 -> 1951 -> 1950 -> 1949 -> 1948 -> 1947 -> 1946 -> 1945 -> 1944 -> 1943 -> 1942 -> 1941 -> 1940 -> 1939 -> 1938 -> 1937 -> 1936 -> 1935 -> 1934 -> 1933 -> 1932 -> 1931 -> 1930 -> 1929 -> 1928 -> 1927 -> 1926 -> 1925 -> 1924 -> 1923 -> 1922 -> 1921 -> 1920 -> 1919 -> 1918 -> 1917 -> 1916 -> 1915 -> 1914 -> 1913 -> 1912 -> 1911 -> 1910 -> 1909 -> 1908 -> 1907 -> 1906 -> 1905 -> 1904 -> 1903 -> 1902 -> 1901 -> 1900 -> 1899 -> 1898 -> 1897 -> 1896 -> 1895 -> 1894 -> 1893 -> 1892 -> 1891 -> 1890 -> 1889 -> 1888 -> 1887 -> 1886 -> 1885 -> 1884 -> 1883 -> 1882 -> 1881 -> 1880 -> 1879 -> 1878 -> 1877 -> 1876 -> 1875 -> 1874 -> 1873 -> 1872 -> 1871 -> 1870 -> 1869 -> 1868 -> 1867 -> 1866 -> 1865 -> 1864 -> 1863 -> 1862 -> 1861 -> 1860 -> 1859 -> 1858 -> 1857 -> 1856 -> 1855 -> 1854 -> 1853 -> 1852 -> 1851 -> 1850 -> 1849 -> 1848 -> 1847 -> 1846 -> 1845 -> 1844 -> 1843 -> 1842 -> 1841 -> 1840 -> 1839 -> 1838 -> 1837 -> 1836 -> 1835 -> 1834 -> 1833 -> 1832 -> 1831 -> 1830 -> 1829 -> 1828 -> 1827 -> 1826 -> 1825 -> 1824 -> 1823 -> 1822 -> 1821 -> 1820 -> 1819 -> 1818 -> 1817 -> 1816 -> 1815 -> 1814 -> 1813 -> 1812 -> 1811 -> 1810 -> 1809 -> 1808 -> 1807 -> 1806 -> 1805 -> 1804 -> 1803 -> 1802 -> 1801 -> 1800 -> 1799 -> 1798 -> 1797 -> 1796 -> 1795 -> 1794 -> 1793 -> 1792 -> 1791 -> 1790 -> 1789 -> 1788 -> 1787 -> 1786 -> 1785 -> 1784 -> 1783 -> 1782 -> 1781 -> 1780 -> 1779 -> 1778 -> 1777 -> 1776 -> 1775 -> 1774 -> 1773 -> 1772 -> 1771 -> 1770 -> 1769 -> 1768 -> 1767 -> 1766 -> 1765 -> 1764 -> 1763 -> 1762 -> 1761 -> 1760 -> 1759 -> 1758 -> 1757 -> 1756 -> 1755 -> 1754 -> 1753 -> 1752 -> 1751 -> 1750 -> 1749 -> 1748 -> 1747 -> 1746 -> 1745 -> 1744 -> 1743 -> 1742 -> 1741 -> 1740 -> 1739 -> 1738 -> 1737 -> 1736 -> 1735 -> 1734 -> 1733 -> 1732 -> 1731 -> 1730 -> 1729 -> 1728 -> 1727 -> 1726 -> 1725 -> 1724 -> 1723 -> 1722 -> 1721 -> 1720 -> 1719 -> 1718 -> 1717 -> 1716 -> 1715 -> 1714 -> 1713 -> 1712 -> 1711 -> 1710 -> 1709 -> 1708 -> 1707 -> 1706 -> 1705 -> 1704 -> 1703 -> 1702 -> 1701 -> 1700 -> 1699 -> 1698 -> 1697 -> 1696 -> 1695 -> 1694 -> 1693 -> 1692 -> 1691 -> 1690 -> 1689 -> 1688 -> 1687 -> 1686 -> 1685 -> 1684 -> 1683 -> 1682 -> 1681 -> 1680 -> 1679 -> 1678 -> 1677 -> 1676 -> 1675 -> 1674 -> 1673 -> 1672 -> 1671 -> 1670 -> 1669 -> 1668 -> 1667 -> 1666 -> 1665 -> 1664 -> 1663 -> 1662 -> 1661 -> 1660 -> 1659 -> 1658 -> 1657 -> 1656 -> 1655 -> 1654 -> 1653 -> 1652 -> 1651 -> 1650 -> 1649 -> 1648 -> 1647 -> 1646 -> 1645 -> 1644 -> 1643 -> 1642 -> 1641 -> 1640 -> 1639 -> 1638 -> 1637 -> 1636 -> 1635 -> 1634 -> 1633 -> 1632 -> 1631 -> 1630 -> 1629 -> 1628 -> 1627 -> 1626 -> 1625 -> 1624 -> 1623 -> 1622 -> 1621 -> 1620 -> 1619 -> 1618 -> 1617 -> 1616 -> 1615 -> 1614 -> 1613 -> 1612 -> 1611 -> 1610 -> 1609 -> 1608 -> 1607 -> 1606 -> 1605 -> 1604 -> 1603 -> 1602 -> 1601 -> 1600 -> 1599 -> 1598 -> 1597 -> 1596 -> 1595 -> 1594 -> 1593 -> 1592 -> 1591 -> 1590 -> 1589 -> 1588 -> 1587 -> 1586 -> 1585 -> 1584 -> 1583 -> 1582 -> 1581 -> 1580 -> 1579 -> 1578 -> 1577 -> 1576 -> 1575 -> 1574 -> 1573 -> 1572 -> 1571 -> 1570 -> 1569 -> 1568 -> 1567 -> 1566 -> 1565 -> 1564 -> 1563 -> 1562 -> 1561 -> 1560 -> 1559 -> 1558 -> 1557 -> 1556 -> 1555 -> 1554 -> 1553 -> 1552 -> 1551 -> 1550 -> 1549 -> 1548 -> 1547 -> 1546 -> 1545 -> 1544 -> 1543 -> 1542 -> 1541 -> 1540 -> 1539 -> 1538 -> 1537 -> 1536 -> 1535 -> 1534 -> 1533 -> 1532 -> 1531 -> 1530 -> 1529 -> 1528 -> 1527 -> 1526 -> 1525 -> 1524 -> 1523 -> 1522 -> 1521 -> 1520 -> 1519 -> 1518 -> 1517 -> 1516 -> 1515 -> 1514 -> 1513 -> 1512 -> 1511 -> 1510 -> 1509 -> 1508 -> 1507 -> 1506 -> 1505 -> 1504 -> 1503 -> 1502 -> 1501 -> 1500 -> 1499 -> 1498 -> 1497 -> 1496 -> 1495 -> 1494 -> 1493 -> 1492 -> 1491 -> 1490 -> 1489 -> 1488 -> 1487 -> 1486 -> 1485 -> 1484 -> 1483 -> 1482 -> 1481 -> 1480 -> 1479 -> 1478 -> 1477 -> 1476 -> 1475 -> 1474 -> 1473 -> 1472 -> 1471 -> 1470 -> 1469 -> 1468 -> 1467 -> 1466 -> 1465 -> 1464 -> 1463 -> 1462 -> 1461 -> 1460 -> 1459 -> 1458 -> 1457 -> 1456 -> 1455 -> 1454 -> 1453 -> 1452 -> 1451 -> 1450 -> 1449 -> 1448 -> 1447 -> 1446 -> 1445 -> 1444 -> 1443 -> 1442 -> 1441 -> 1440 -> 1439 -> 1438 -> 1437 -> 1436 -> 1435 -> 1434 -> 1433 -> 1432 -> 1431 -> 1430 -> 1429 -> 1428 -> 1427 -> 1426 -> 1425 -> 1424 -> 1423 -> 1422 -> 1421 -> 1420 -> 1419 -> 1418 -> 1417 -> 1416 -> 1415 -> 1414 -> 1413 -> 1412 -> 1411 -> 1410 -> 1409 -> 1408 -> 1407 -> 1406 -> 1405 -> 1404 -> 1403 -> 1402 -> 1401 -> 1400 -> 1399 -> 1398 -> 1397 -> 1396 -> 1395 -> 1394 -> 1393 -> 1392 -> 1391 -> 1390 -> 1389 -> 1388 -> 1387 -> 1386 -> 1385 -> 1384 -> 1383 -> 1382 -> 1381 -> 1380 -> 1379 -> 1378 -> 1377 -> 1376 -> 1375 -> 1374 -> 1373 -> 1372 -> 1371 -> 1370 -> 1369 -> 1368 -> 1367 -> 1366 -> 1365 -> 1364 -> 1363 -> 1362 -> 1361 -> 1360 -> 1359 -> 1358 -> 1357 -> 1356 -> 1355 -> 1354 -> 1353 -> 1352 -> 1351 -> 1350 -> 1349 -> 1348 -> 1347 -> 1346 -> 1345 -> 1344 -> 1343 -> 1342 -> 1341 -> 1340 -> 1339 -> 1338 -> 1337 -> 1336 -> 1335 -> 1334 -> 1333 -> 1332 -> 1331 -> 1330 -> 1329 -> 1328 -> 1327 -> 1326 -> 1325 -> 1324 -> 1323 -> 1322 -> 1321 -> 1320 -> 1319 -> 1318 -> 1317 -> 1316 -> 1315 -> 1314 -> 1313 -> 1312 -> 1311 -> 1310 -> 1309 -> 1308 -> 1307 -> 1306 -> 1305 -> 1304 -> 1303 -> 1302 -> 1301 -> 1300 -> 1299 -> 1298 -> 1297 -> 1296 -> 1295 -> 1294 -> 1293 -> 1292 -> 1291 -> 1290 -> 1289 -> 1288 -> 1287 -> 1286 -> 1285 -> 1284 -> 1283 -> 1282 -> 1281 -> 1280 -> 1279 -> 1278 -> 1277 -> 1276 -> 1275 -> 1274 -> 1273 -> 1272 -> 1271 -> 1270 -> 1269 -> 1268 -> 1267 -> 1266 -> 1265 -> 1264 -> 1263 -> 1262 -> 1261 -> 1260 -> 1259 -> 1258 -> 1257 -> 1256 -> 1255 -> 1254 -> 1253 -> 1252 -> 1251 -> 1250 -> 1249 -> 1248 -> 1247 -> 1246 -> 1245 -> 1244 -> 1243 -> 1242 -> 1241 -> 1240 -> 1239 -> 1238 -> 1237 -> 1236 -> 1235 -> 1234 -> 1233 -> 1232 -> 1231 -> 1230 -> 1229 -> 1228 -> 1227 -> 1226 -> 1225 -> 1224 -> 1223 -> 1222 -> 1221 -> 1220 -> 1219 -> 1218 -> 1217 -> 1216 -> 1215 -> 1214 -> 1213 -> 1212 -> 1211 -> 1210 -> 1209 -> 1208 -> 1207 -> 1206 -> 1205 -> 1204 -> 1203 -> 1202 -> 1201 -> 1200 -> 1199 -> 1198 -> 1197 -> 1196 -> 1195 -> 1194 -> 1193 -> 1192 -> 1191 -> 1190 -> 1189 -> 1188 -> 1187 -> 1186 -> 1185 -> 1184 -> 1183 -> 1182 -> 1181 -> 1180 -> 1179 -> 1178 -> 1177 -> 1176 -> 1175 -> 1174 -> 1173 -> 1172 -> 1171 -> 1170 -> 1169 -> 1168 -> 1167 -> 1166 -> 1165 -> 1164 -> 1163 -> 1162 -> 1161 -> 1160 -> 1159 -> 1158 -> 1157 -> 1156 -> 1155 -> 1154 -> 1153 -> 1152 -> 1151 -> 1150 -> 1149 -> 1148 -> 1147 -> 1146 -> 1145 -> 1144 -> 1143 -> 1142 -> 1141 -> 1140 -> 1139 -> 1138 -> 1137 -> 1136 -> 1135 -> 1134 -> 1133 -> 1132 -> 1131 -> 1130 -> 1129 -> 1128 -> 1127 -> 1126 -> 1125 -> 1124 -> 1123 -> 1122 -> 1121 -> 1120 -> 1119 -> 1118 -> 1117 -> 1116 -> 1115 -> 1114 -> 1113 -> 1112 -> 1111 -> 1110 -> 1109 -> 1108 -> 1107 -> 1106 -> 1105 -> 1104 -> 1103 -> 1102 -> 1101 -> 1100 -> 1099 -> 1098 -> 1097 -> 1096 -> 1095 -> 1094 -> 1093 -> 1092 -> 1091 -> 1090 -> 1089 -> 1088 -> 1087 -> 1086 -> 1085 -> 1084 -> 1083 -> 1082 -> 1081 -> 1080 -> 1079 -> 1078 -> 1077 -> 1076 -> 1075 -> 1074 -> 1073 -> 1072 -> 1071 -> 1070 -> 1069 -> 1068 -> 1067 -> 1066 -> 1065 -> 1064 -> 1063 -> 1062 -> 1061 -> 1060 -> 1059 -> 1058 -> 1057 -> 1056 -> 1055 -> 1054 -> 1053 -> 1052 -> 1051 -> 1050 -> 1049 -> 1048 -> 1047 -> 1046 -> 1045 -> 1044 -> 1043 -> 1042 -> 1041 -> 1040 -> 1039 -> 1038 -> 1037 -> 1036 -> 1035 -> 1034 -> 1033 -> 1032 -> 1031 -> 1030 -> 1029 -> 1028 -> 1027 -> 1026 -> 1025 -> 1024 -> 1023 -> 1022 -> 1021 -> 1020 -> 1019 -> 1018 -> 1017 -> 1016 -> 1015 -> 1014 -> 1013 -> 1012 -> 1011 -> 1010 -> 1009 -> 1008 -> 1007 -> 1006 -> 1005 -> 1004 -> 1003 -> 1002 -> 1001 -> 1000 
+0

хорошо, поэтому мне нужно передать j в мой новый узел в параметре int и в свой список связанных кандидатов? это верно? – maxbr7t

+0

@ maxbr7t Не содержит ли список целых чисел? Если да, то да, вам нужно установить информацию в числовое значение в цикле. –

+0

да, список должен содержать ints от 1000-9999. спасибо за его очистку, но компилятор говорит мне, что новый узел, который я пытался создать, не используется. – maxbr7t

1

Вы должны иметь курсор, чтобы добавить элементы в связанном списке. В противном случае вы будете только перезаписывать один и тот же элемент в списке.

LLIntegerNode head = new LLIntegerNode(9999, null); 
LLIntegerNode cursor = head; 
for(int j = 9998; j >= 1000; j--){ 
    LLIntegerNode canNode = new LLIntegerNode(j, null); //new node 
    cursor.setLink(canNode); 
    cursor = canNode; 
} 
+0

, но мой кандидат LinkedList здесь не используется – maxbr7t

+0

Вы можете переименовать 'head' в' кандидат', если 'кандидат' является главой связанного списка. –

0

Есть несколько вещей, которые я вижу, которые вызывают проблемы. Я думаю, что хорошим первым шагом будет выписать какой-нибудь псевдокод/​​выписать шаги, которые необходимы для того, что вы пытаетесь выполнить.

Итак, что нам нужно, прежде чем мы начнем?

  • Нам нужна ссылка на главу списка, иначе мы потеряем другие узлы.
  • Нам нужна ссылка на хвост списка, на который мы добавим новые узлы
  • в начале, голова и хвост - это один и тот же узел.

После этого вы можете добавить добавление оставшихся значений в список. Чтобы сделать это, вы хотите, для каждого оставшегося числа:

  • создать новый узел к следующему значению в строке
  • установить новый узел будет узел хвоста ссылки ссылки на
  • Установите хвост ссылка на быть то, что новый узел

LLIntegerNode candidate = new LLIntegerNode(1000, null);//the head of the linked list 
LLIntegerNode tail = candidate;//the tail reference 

for(int j = 10001; j <= 9999; j++){ 
    LLIntegerNode newNode = new LLIntegerNode(j, null); 
    tail.setLink(newNode); 
    tail = newNode; 
} 

В единственном списке, который вы строите здесь, каждый узел знает только о следующем узле в цепочке. Он не ссылается на предыдущий узел. Если вы не держите ссылку на голову списка и постоянно обновляете «кандидат», чтобы быть новым узлом, который вы только что добавили в конец списка, вы в конечном итоге укажете только на последний элемент списка.

Поскольку вы хотите, чтобы список шел от 1000 до 9999, вам нужно создать список спереди назад. Если вы не хотите использовать вторую ссылку на хвост списка и строить его с обратной стороны, вам нужно будет сделать «кандидатом» узел, на который указывает новый узел, а затем обновить «кандидат», чтобы указать на новый узел, который вы создали.

LLIntegerNode candidate = new LLIntegerNode(9999, null); 
for(int j = 9998; int j >= 1000; j--){ 
    LLIntegerNode newNode = new LLIntegerNode(j, candidate); 
    candidate = newNode; 
} 
Смежные вопросы