Method 4: Gets the value of element number i
For example, if list is {22, 33, 44, 55, 66, 77, 88, 99}, then get(list, 2) will return 44.
Solution 1: static int get(Node list, int i) { if (i < 0) { throw new IllegalArgumentException(); } for (int j = 0; j < i; j++) { if (list == null) { throw new IllegalStateException(); } list = list.next; } return list.data; } Solution 2: static int get(Node list, int i) { Node p = list; int j = 0; while (j < i && p != null) { ++j; p = p.next; } if(p == null) { throw new java.util.NoSuchElementException(); } return p.data; }
The output is as follows:
Method 5:inserts x as element number i;
For example, if list is {22, 33, 44, 55, 66, 77, 88, 99}, then put(list, 3, 50) will change List to {22, 33, 44, 50, 55, 66, 44, 88, 99}.
Hint: if i= 0, replace the value of the first node With x, and insert a new node immediately after it that contains the previous fist value.
Solution 1: static void put(Node list, int i, int x) { if (list == null) { throw new java.util.NoSuchElementException("List is Empty"); } else if (i ==0) { list.next = new Node(list.data,list); list.data = x; } else { Node p = list; int j = 1; while (j < i && p != null) { ++j; p = p.next; } if (p == null) { String error = String.format("the list has only %d elements", j-1);; throw new java.util.NoSuchElementException(error); } p.next = new Node(x, p.next); } }
The output is as follows:
Method 6:Swap the i element with the j element
For example, if list is {22, 33, 44, 55, 66, 77, 88, 99}, then swap(list, 2, 5) will change List to {22, 33, 77, 55, 66, 44, 88, 99}.
static void swap(Node list, int i, int j) { if (i < 0 || j < 0) { throw new IllegalArgumentException(); } else if (i == j) { return; } Node p = list, q = list; for (int ii = 0; ii < i; ii++) { if (p == null) { throw new IllegalStateException(); } p = p.next; } for (int jj = 0; jj < j; jj++) { if (q == null) { throw new IllegalStateException(); } q = q.next; } int pdata = p.data, qdata = q.data; p.data = qdata; q.data = pdata; return; }
The output is as follows:
Method 7: Gets a new list that contains all the elements of list1 and list2 in ascending order. List1 and list2 are both in ascending order.
For example, if list1is {22, 33, 55, 88} and list2is {44, 66, 77, 99}, then merged(list1, list2)will return the new list {22, 33, 44, 55, 66, 77, 88, 99}.
Note that the three lists should be completely independent of each other. Changing one list should have no effect upon the others.
static Node merged(Node list1, Node list2) { Node list = new Node(0); Node p = list, p1 = list1, p2 = list2; while (p1 != null && p2 != null) { if (p1.data < p2.data) { p = p.next = new Node(p1.data); p1 = p1.next; } else { p = p.next = new Node(p2.data); p2 = p2.next; } } while (p1 != null) { p = p.next = new Node(p1.data); p1 = p1.next; } while (p2 != null) { p = p.next = new Node(p2.data); p2 = p2.next; } return list.next; }The output is as follows: