/* * Author: Yang Pei * Problem: Reverse List String * * Note: * Given a string represent by a list, each node in the list contains a character, * A word is separated by space. Reverse each word in the list. * For example * 'h'->'e'->'l'->'l'->'o'->' '->'w'->'o'->'r'->'l'->'d' would be changed to * 'o'->'l'->'l'->'e'->'h'->' '->'d'->'l'->'r'->'o'->'w' * * Solution: * Two pointers. Be careful: there might be multiple spaces between two words. And there * might be leading and tailing spaces. And there might contains no space and there might * be all space. * * Define of the ListNodeC * { * char val; * ListNodeC next; * public ListNodeC(char ch) { * this.val = ch; * this.next = null; * } * } */ public class ReverseListString { public static ListNodeC reverse(ListNodeC head) { if(head == null) return head; ListNodeC dummy = new ListNodeC(' '); dummy.next = head; ListNodeC pointer1 = dummy, pointer2 = dummy; while(pointer1.next != null) { while(pointer2.next != null && pointer2.next.val == ' ') pointer2 = pointer2.next; if(pointer2.next == null) break; pointer1 = pointer2; // pay attention here, otherwise would have infinite loop pointer2 = pointer2.next; while(pointer2.next != null && pointer2.next.val != ' ') { ListNodeC temp = pointer2.next; pointer2.next = temp.next; temp.next = pointer1.next; pointer1.next = temp; } pointer1 = pointer2; } return dummy.next; } public static void main(String[] args) { String str = " a ba c "; ListNodeC dummy = new ListNodeC(' '); ListNodeC temp = dummy; for(int i = 0; i < str.length(); i++) { ListNodeC node = new ListNodeC(str.charAt(i)); temp.next = node; temp = temp.next; } temp = dummy.next; while(temp != null) { System.out.print(temp.val); temp = temp.next; } System.out.println(""); temp = reverse(dummy.next); while(temp != null) { System.out.print(temp.val); temp = temp.next; } System.out.println(""); } }
2015年1月6日星期二
Reverse List String
订阅:
博文评论 (Atom)
没有评论:
发表评论