Difference between revisions of "TADM2E 3.2"
From Algorithm Wiki
(Recovering wiki) |
(Add solution in java) |
||
| Line 28: | Line 28: | ||
} | } | ||
</pre> | </pre> | ||
| + | |||
| + | ======================================================== | ||
| + | |||
| + | [['''In Java | ||
| + | ''']] | ||
| + | class ListNode { | ||
| + | int val; | ||
| + | ListNode next; | ||
| + | |||
| + | ListNode(final int x) { | ||
| + | val = x; | ||
| + | next = null; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | public class LinkedList { | ||
| + | ListNode head; | ||
| + | |||
| + | public LinkedList() { | ||
| + | head = null; | ||
| + | } | ||
| + | |||
| + | public void prepend(final int in) { | ||
| + | final ListNode data = new ListNode(in); | ||
| + | data.next = head; | ||
| + | head = data; | ||
| + | } | ||
| + | |||
| + | public void appendToList(final int in) { | ||
| + | final ListNode data = new ListNode(in); | ||
| + | ListNode current = head; | ||
| + | if (head == null) { | ||
| + | head = data; | ||
| + | return; | ||
| + | } | ||
| + | while (current.next != null) { | ||
| + | current = current.next; | ||
| + | } | ||
| + | current.next = data; | ||
| + | } | ||
| + | |||
| + | public void printList(final ListNode head) { | ||
| + | ListNode current = head; | ||
| + | while (current != null) { | ||
| + | System.out.print(current.val + " -> "); | ||
| + | current = current.next; | ||
| + | } | ||
| + | System.out.println(); | ||
| + | } | ||
| + | |||
| + | public ListNode reverseList(final ListNode node) { | ||
| + | //what if 0 node in list | ||
| + | if (node == null) { | ||
| + | return null; | ||
| + | } | ||
| + | //what if 1 node in list | ||
| + | if (node.next == null) { | ||
| + | return node; | ||
| + | } | ||
| + | //what if multiple nodes.divide into two parts . reverse second part recursively and in end point second.next to first | ||
| + | final ListNode secondElem = node.next; | ||
| + | node.next = null; | ||
| + | final ListNode reverseRest = reverseList(secondElem); | ||
| + | secondElem.next = node; | ||
| + | return reverseRest; | ||
| + | } | ||
| + | |||
| + | public static void main(final String[] args) { | ||
| + | final LinkedList linkedList = new LinkedList(); | ||
| + | linkedList.appendToList(12); | ||
| + | linkedList.appendToList(13); | ||
| + | linkedList.appendToList(14); | ||
| + | linkedList.appendToList(15); | ||
| + | linkedList.printList(linkedList.head); | ||
| + | final ListNode head = linkedList.reverseList(linkedList.head); | ||
| + | linkedList.printList(head); | ||
| + | } | ||
| + | |||
| + | } | ||
[[Data-structures-TADM2E|Back to ''Data Structures'' Problems]]... | [[Data-structures-TADM2E|Back to ''Data Structures'' Problems]]... | ||
Revision as of 19:27, 10 April 2015
typedef struct Node {
char *value;
struct Node *next;
} Node;
int reverse(Node **head) {
Node *curr, *prev, *next;
if (!head || !(*head)) {
return 0;
}
curr = *head;
prev = NULL;
next = NULL;
while (curr) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
*head = prev;
return 1;
}
============================================
[[In Java ]] class ListNode {
int val; ListNode next;
ListNode(final int x) {
val = x;
next = null;
}
}
public class LinkedList {
ListNode head;
public LinkedList() {
head = null;
}
public void prepend(final int in) {
final ListNode data = new ListNode(in);
data.next = head;
head = data;
}
public void appendToList(final int in) {
final ListNode data = new ListNode(in);
ListNode current = head;
if (head == null) {
head = data;
return;
}
while (current.next != null) {
current = current.next;
}
current.next = data;
}
public void printList(final ListNode head) {
ListNode current = head;
while (current != null) {
System.out.print(current.val + " -> ");
current = current.next;
}
System.out.println();
}
public ListNode reverseList(final ListNode node) {
//what if 0 node in list
if (node == null) {
return null;
}
//what if 1 node in list
if (node.next == null) {
return node;
}
//what if multiple nodes.divide into two parts . reverse second part recursively and in end point second.next to first
final ListNode secondElem = node.next;
node.next = null;
final ListNode reverseRest = reverseList(secondElem);
secondElem.next = node;
return reverseRest;
}
public static void main(final String[] args) {
final LinkedList linkedList = new LinkedList();
linkedList.appendToList(12);
linkedList.appendToList(13);
linkedList.appendToList(14);
linkedList.appendToList(15);
linkedList.printList(linkedList.head);
final ListNode head = linkedList.reverseList(linkedList.head);
linkedList.printList(head);
}
}