タイトル
隣接ノードとのリストのペアごとの交換を考えると、交換にリストを返します。
あなたは、単に内部ノード値を変更しますが、実際のノード交換する必要がないことができます。
例
1 - > 2 - > 3 - > 4を考えると、あなたは、2-> 1 - > 4 - > 3返す必要があります。
思考
これは質問の基本的なリストである、私は結果がそうではありません見つけ書き、良いアイデアをしたいと思います。私は、そのように処理されたリスト上の次の3つのノードの前、CURを、使用少しスキル、我々は追加のノードを保存するために使用される新しい事前があり、あなたがpre.next最終リターンを返すことができ、中に心配する必要はありませんでした位置変更、不足しているヘッドノード。
コード
public class problem24 {
//Definition for singly-linked list.
public static class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public ListNode swapPairs(ListNode head) {
//特殊情况判断
if(head==null) return null;
if(head.next==null) return head;
//三个指针进行反序操作
ListNode pre=new ListNode(0);
ListNode cur=head;
ListNode next=cur.next;
ListNode re=pre;//保存头节点,最后返回re.next即可
while(cur!=null&&cur.next!=null){
// System.out.println("cur:"+cur.val);
cur.next=next.next;
next.next=cur;
pre.next=next;
pre=cur;
cur=cur.next;
//长度是偶数时会出现cur是null的情况,所以添加if进行判断,以免报错
if(cur!=null&&cur.next!=null) next=cur.next;
}
return re.next;
}
public static void main(String[] args) {
ListNode a=new ListNode(1);
a.next=new ListNode(2);
a.next.next=new ListNode(3);
a.next.next.next=new ListNode(4);
problem24 pro=new problem24();
ListNode re=pro.swapPairs(a);
while(re!=null){
System.out.println(re.val);
re=re.next;
}
}
}
2
1
4
3