反向第二半鏈表
例如:
偶數: 2-> 1-> 3-> 4-> 5-> 6-> 7-> 8 == ===> 2-> 1-> 3-> 4-> 8-> 7-> 6-> 5;反向鏈接列表的右半奇數:5-> 7-> 8-> 6-> 3-> 4 - > 2 ==> 5-> 7-> 8-> 2-> 4-> 3->如圖6所示,中間 一個也需要被反轉
class ListNode
{
int val;
ListNode next;
ListNode(int x) { val = x; }
}
class ReverseRightHalfLinkedList
{
public static void main(String[] args)
{
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(4);
ListNode node5 = new ListNode(5);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
ListNode res = reverse(node1);//line 31
// ListNode node = node1;
// while (node != null)
// {
// System.out.println(node.val);
// node = node.next;
// }
}
public static ListNode reverse(ListNode start)
{
int counter = 0;
ListNode node = start;
ListNode pre = start;
while (node!= null)
{
counter += 1;
node = node.next;
}
for (int i=0; i<counter/2; i++)
{
pre = start;
start = start.next;
}
ListNode cur = start;
if (counter%2 ==0)
{
while (cur != null)
{
ListNode temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
}
else
{
pre = pre.next;
cur = start.next;
System.out.println(pre.val);
System.out.println(cur.val);
while (cur != null)
{
ListNode temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
System.out.println("-----");
System.out.println(pre.val); // line 90
System.out.println(cur.val);
System.out.println("-----");
System.out.println();
}
}
return start;
}
}
首先,我收到錯誤消息。
在 ReverseRightHalfLinkedList.main(OA2.java:31)在 ReverseRightHalfLinkedList.reverse(OA2.java:90)線程 「主」 顯示java.lang.NullPointerException異常
其次,我試圖打印反向鏈表的順序,它仍然是有序的。它沒有被扭轉。
請幫我弄清楚這兩個問題。非常感謝!
非常感謝你的幫助。根據你的想法,我得到了一個更簡潔的代碼。再一次,非常感謝你的幫助。 – OregonDuck